dev798
parent
62cd733b04
commit
1a26d23135
|
@ -54,7 +54,7 @@ public class ProductController {
|
||||||
@PostMapping("/productInsert")
|
@PostMapping("/productInsert")
|
||||||
public R<Product>productInsert(@Valid @RequestBody ProductReq productReq){
|
public R<Product>productInsert(@Valid @RequestBody ProductReq productReq){
|
||||||
productService.productInsert(productReq);
|
productService.productInsert(productReq);
|
||||||
return R.ok();
|
return R.ok(null,"添加成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("删除商品")
|
@ApiOperation("删除商品")
|
||||||
|
@ -64,6 +64,13 @@ public class ProductController {
|
||||||
return AjaxResult.success(res==1?"删除成功":"删除失败");
|
return AjaxResult.success(res==1?"删除成功":"删除失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("修改商品")
|
||||||
|
@PostMapping("/productUpdate")
|
||||||
|
public R productUpdate(@Valid @RequestBody ProductReq productReq){
|
||||||
|
productService.productUpdate(productReq);
|
||||||
|
return R.ok(null,"添加成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ApiOperation("图片上传")
|
@ApiOperation("图片上传")
|
||||||
@PostMapping("/upload")
|
@PostMapping("/upload")
|
||||||
|
|
|
@ -19,4 +19,6 @@ public interface ProductService {
|
||||||
|
|
||||||
|
|
||||||
Integer deleteProduct(Integer id);
|
Integer deleteProduct(Integer id);
|
||||||
|
|
||||||
|
void productUpdate(ProductReq productReq);
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,6 +129,11 @@ public class ProductServiceImpl implements ProductService {
|
||||||
return productMapper.deleteProduct(id);
|
return productMapper.deleteProduct(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void productUpdate(ProductReq productReq) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void insertProductSku(ProductReq productReq) {
|
private void insertProductSku(ProductReq productReq) {
|
||||||
List<ProductSku> productSkuList = productReq.getProductSkus();
|
List<ProductSku> productSkuList = productReq.getProductSkus();
|
||||||
int productId = productReq.getProduct().getId();
|
int productId = productReq.getProduct().getId();
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.muyu</groupId>
|
||||||
|
<artifactId>muyu</artifactId>
|
||||||
|
<version>3.6.3</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<artifactId>muyu-rabbit</artifactId>
|
||||||
|
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||||
|
<artifactId>jackson-dataformat-xml</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>5.8.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-test</artifactId>
|
||||||
|
<version>2.7.5</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-test</artifactId>
|
||||||
|
<version>5.3.23</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.nacos</groupId>
|
||||||
|
<artifactId>nacos-client</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.muyu.rabbit.Consumer;
|
||||||
|
|
||||||
|
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||||
|
import org.springframework.messaging.handler.annotation.Payload;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: wangxinyuan
|
||||||
|
* @Date: 2024/4/8 21:02
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class MessageReceiver {
|
||||||
|
|
||||||
|
|
||||||
|
@RabbitListener(queues = "DxQueue")
|
||||||
|
public void receiveMessage(@Payload String message) {
|
||||||
|
try {
|
||||||
|
// 手动添加异常代码,模拟消费时的异常情况
|
||||||
|
if (message.contains("error")) {
|
||||||
|
throw new RuntimeException("Simulated error");
|
||||||
|
}
|
||||||
|
System.out.println("Received message: " + message);
|
||||||
|
// 模拟消费成功,打印ack成功日志
|
||||||
|
System.out.println("ACK: Message processed successfully");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 消费异常,打印失败日志
|
||||||
|
System.err.println("Failed to process message: " + e.getMessage());
|
||||||
|
// 可以选择进行消息的重试或者将消息进行持久化等操作
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.muyu.rabbit.Consumer;
|
||||||
|
|
||||||
|
import org.springframework.amqp.core.AmqpTemplate;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: wangxinyuan
|
||||||
|
* @Date: 2024/4/8 21:02
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class MessageSender {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AmqpTemplate amqpTemplate;
|
||||||
|
|
||||||
|
public void sendMessage(String message){
|
||||||
|
amqpTemplate.convertAndSend("exchange", "routingKey", message);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.muyu.rabbit;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: wangxinyuan
|
||||||
|
* @Date: 2024/4/8 15:06
|
||||||
|
*/
|
||||||
|
@SpringBootApplication
|
||||||
|
public class RabbitApplication {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(RabbitApplication.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.muyu.rabbit.util;
|
||||||
|
|
||||||
|
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
|
||||||
|
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||||
|
import org.springframework.amqp.rabbit.core.RabbitAdmin;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RabbitAdmin是RabbitMQ的一个Java客户端库,它提供了管理RabbitMQ资源的功能。它是通过与RabbitMQ服务器进行交互来执行管理操作的。
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class RabbitAdminConfig {
|
||||||
|
|
||||||
|
@Value("${spring.rabbitmq.host}")
|
||||||
|
private String host;
|
||||||
|
@Value("${spring.rabbitmq.username}")
|
||||||
|
private String username;
|
||||||
|
@Value("${spring.rabbitmq.password}")
|
||||||
|
private String password;
|
||||||
|
@Value("${spring.rabbitmq.virtualhost}")
|
||||||
|
private String virtualhost;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建 RabbitMQ的连接工厂
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public ConnectionFactory connectionFactory() {
|
||||||
|
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
|
||||||
|
connectionFactory.setAddresses(host);
|
||||||
|
connectionFactory.setUsername(username);
|
||||||
|
connectionFactory.setPassword(password);
|
||||||
|
connectionFactory.setVirtualHost(virtualhost);
|
||||||
|
// 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效
|
||||||
|
connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
|
||||||
|
connectionFactory.setPublisherReturns(true);
|
||||||
|
return connectionFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自己初始化 RabbitAdmin
|
||||||
|
* @param connectionFactory
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
|
||||||
|
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
|
||||||
|
rabbitAdmin.setAutoStartup(true);
|
||||||
|
return rabbitAdmin;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
package com.muyu.rabbit.util.config;
|
||||||
|
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import org.springframework.amqp.core.*;
|
||||||
|
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||||
|
import org.springframework.amqp.rabbit.connection.CorrelationData;
|
||||||
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
|
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
|
||||||
|
import org.springframework.amqp.support.converter.MessageConverter;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @CLassName MqConfig
|
||||||
|
* @Description 描述
|
||||||
|
* @Author Meng.Wang
|
||||||
|
* @Date 2023/11/24 21:15
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@Log4j2
|
||||||
|
public class MqConfig implements RabbitTemplate.ReturnsCallback,RabbitTemplate.ConfirmCallback{
|
||||||
|
public static final String DXQUEUE = "DxQueue";
|
||||||
|
public static final String DXEXCHANGE = "DxExchange";
|
||||||
|
public static final String ROUTINGKEY = "RoutingKey";
|
||||||
|
|
||||||
|
private RabbitTemplate rabbitTemplate;
|
||||||
|
|
||||||
|
//创建消息转换器
|
||||||
|
@Bean
|
||||||
|
public MessageConverter messageConverter(){
|
||||||
|
return new Jackson2JsonMessageConverter();
|
||||||
|
}
|
||||||
|
|
||||||
|
//创建队列
|
||||||
|
@Bean
|
||||||
|
public Queue queue(){
|
||||||
|
return new Queue(DXQUEUE,true);
|
||||||
|
}
|
||||||
|
//创建交换机
|
||||||
|
@Primary
|
||||||
|
@Bean
|
||||||
|
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
|
||||||
|
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
|
||||||
|
this.rabbitTemplate = rabbitTemplate;
|
||||||
|
rabbitTemplate.setMessageConverter(messageConverter());
|
||||||
|
rabbitTemplate();
|
||||||
|
return rabbitTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("DxExchange")
|
||||||
|
public DirectExchange directExchange(){
|
||||||
|
return new DirectExchange(DXEXCHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rabbitTemplate(){
|
||||||
|
rabbitTemplate.setConfirmCallback(this);
|
||||||
|
rabbitTemplate.setReturnsCallback(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public Binding binding(){
|
||||||
|
return BindingBuilder.bind(queue()).to(directExchange()).with(ROUTINGKEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void confirm(CorrelationData correlationData, boolean b, String s) {
|
||||||
|
if(b){
|
||||||
|
log.info("{}消息到达交换机",correlationData.getId());
|
||||||
|
}else {
|
||||||
|
log.error("{}消息丢失",correlationData.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void returnedMessage(ReturnedMessage returnedMessage) {
|
||||||
|
log.error("{}消息未到达队列",returnedMessage.getMessage().getMessageProperties().getMessageId());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.muyu.rabbit.util.config;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.amqp.core.AmqpTemplate;
|
||||||
|
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
|
||||||
|
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||||
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: wangxinyuan
|
||||||
|
* @Date: 2024/4/8 20:23
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@EnableRabbit
|
||||||
|
public class RabbitConfig {
|
||||||
|
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public AmqpTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
|
||||||
|
return new RabbitTemplate(connectionFactory);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.muyu.rabbit.util.config;
|
||||||
|
|
||||||
|
import org.springframework.amqp.core.Queue;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: wangxinyuan
|
||||||
|
* @Date: 2024/4/8 21:00
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class RabbitMQConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public Queue queue() {
|
||||||
|
return new Queue("queue");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
server:
|
||||||
|
port: 9197
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
druid:
|
||||||
|
stat-view-servlet:
|
||||||
|
enabled: true
|
||||||
|
loginUsername: admin
|
||||||
|
loginPassword: 123456
|
||||||
|
dynamic:
|
||||||
|
druid:
|
||||||
|
initial-size: 5
|
||||||
|
min-idle: 5
|
||||||
|
maxActive: 20
|
||||||
|
maxWait: 60000
|
||||||
|
timeBetweenEvictionRunsMillis: 60000
|
||||||
|
minEvictableIdleTimeMillis: 300000
|
||||||
|
validationQuery: SELECT 1 FROM DUAL
|
||||||
|
testWhileIdle: true
|
||||||
|
testOnBorrow: false
|
||||||
|
testOnReturn: false
|
||||||
|
poolPreparedStatements: true
|
||||||
|
maxPoolPreparedStatementPerConnectionSize: 20
|
||||||
|
filters: stat,slf4j
|
||||||
|
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
|
||||||
|
datasource:
|
||||||
|
# 主库数据源
|
||||||
|
master:
|
||||||
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
url: jdbc:mysql://111.231.174.71:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||||
|
username: root
|
||||||
|
password: wxy@123
|
||||||
|
# 从库数据源
|
||||||
|
# slave:
|
||||||
|
# username:
|
||||||
|
# password:
|
||||||
|
# url:
|
||||||
|
# driver-class-name:
|
||||||
|
main:
|
||||||
|
allow-bean-definition-overriding: true
|
||||||
|
application:
|
||||||
|
name: muyu-rabbit
|
||||||
|
profiles:
|
||||||
|
# 环境配置
|
||||||
|
active: dev
|
||||||
|
cloud:
|
||||||
|
nacos:
|
||||||
|
discovery:
|
||||||
|
serverAddr: 111.231.174.71:8848
|
||||||
|
config:
|
||||||
|
serverAddr: 111.231.174.71:8848
|
||||||
|
fileExtension: yml
|
||||||
|
shared-configs:
|
||||||
|
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||||
|
rabbitmq:
|
||||||
|
username: guest
|
||||||
|
password: guest
|
||||||
|
virtualHost: /
|
||||||
|
port: 5672
|
||||||
|
host: 111.231.174.71
|
||||||
|
listener:
|
||||||
|
simple:
|
||||||
|
prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条
|
||||||
|
publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
|
||||||
|
publisher-returns: true #确认消息已发送到队列(Queue)
|
1
pom.xml
1
pom.xml
|
@ -216,6 +216,7 @@
|
||||||
<module>muyu-modules</module>
|
<module>muyu-modules</module>
|
||||||
<module>muyu-common</module>
|
<module>muyu-common</module>
|
||||||
<module>muyu-modules/muyu-product</module>
|
<module>muyu-modules/muyu-product</module>
|
||||||
|
<module>muyu-modules/muyu-rabbit</module>
|
||||||
</modules>
|
</modules>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue