dev798
wxy 2024-04-12 19:32:58 +08:00
parent 3febf38dc4
commit 383519a2d7
16 changed files with 17 additions and 414 deletions

View File

@ -138,6 +138,9 @@
</dependencies>
</project>

View File

@ -27,4 +27,6 @@
muyu-common通用模块
</description>
</project>

View File

@ -25,4 +25,5 @@
</dependency>
</dependencies>
</project>

View File

@ -6,7 +6,7 @@ server:
spring:
application:
# 应用名称
name: muyu-product
name: muyu-product-wxy
profiles:
# 环境配置
active: dev
@ -14,8 +14,9 @@ spring:
nacos:
discovery:
# 服务注册地址
server-addr: 111.231.174.71:8848
namespace: addbe994-b6ee-4b87-bde0-76f34d2681bd
server-addr: 43.142.117.78:8848
namespace: 9facbf7b-873b-4e11-b54f-00627208906d
ip: 111.231.174.71
config:
# 配置中心地址
server-addr: 111.231.174.71:8848

View File

@ -16,7 +16,6 @@
<module>muyu-product-commo</module>
<module>muyu-product-remote</module>
<module>muyu-product-server</module>
<module>muyu-product-server</module>
</modules>
<properties>

View File

@ -1,76 +0,0 @@
<?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>

View File

@ -1,32 +0,0 @@
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());
// 可以选择进行消息的重试或者将消息进行持久化等操作
}
}
}

View File

@ -1,22 +0,0 @@
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);
}
}

View File

@ -1,15 +0,0 @@
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);
}
}

View File

@ -1,53 +0,0 @@
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;
/**
* RabbitAdminRabbitMQJavaRabbitMQRabbitMQ
*/
@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;
}
}

View File

@ -1,79 +0,0 @@
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());
}
}

View File

@ -1,32 +0,0 @@
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);
}
}

View File

@ -1,18 +0,0 @@
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");
}
}

View File

@ -1,65 +0,0 @@
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)

View File

@ -13,8 +13,10 @@
<module>muyu-gen</module>
<module>muyu-job</module>
<module>muyu-file</module>
<module>muyu-product</module>
</modules>
<artifactId>muyu-modules</artifactId>
<packaging>pom</packaging>
@ -22,4 +24,6 @@
muyu-modules业务模块
</description>
</project>

21
pom.xml
View File

@ -215,8 +215,6 @@
<module>muyu-visual</module>
<module>muyu-modules</module>
<module>muyu-common</module>
<module>muyu-modules/muyu-product</module>
<module>muyu-modules/muyu-rabbit</module>
</modules>
<packaging>pom</packaging>
@ -255,22 +253,7 @@
</executions>
</plugin>
<!-- 要将源码放上去,需要加入这个插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
@ -308,4 +291,6 @@
</pluginRepository>
</pluginRepositories>
</project>