diff --git a/.gitignore b/.gitignore index 09bdfea..c8574b8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ target/ !.mvn/wrapper/maven-wrapper.jar +out ###################################################################### # IDE diff --git a/cloud-common/cloud-common-rabbit/pom.xml b/cloud-common/cloud-common-rabbit/pom.xml new file mode 100644 index 0000000..fa6d383 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.muyu + cloud-common + 3.6.3 + + + cloud-common-rabbit + + + 17 + 17 + UTF-8 + + + + + + + org.springframework.boot + spring-boot-starter-amqp + + + + + com.muyu + cloud-common-core + + + + \ No newline at end of file diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java new file mode 100644 index 0000000..51cb359 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java @@ -0,0 +1,41 @@ +package com.muyu.common.rabbit; + +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.converter.MappingJackson2MessageConverter; +import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; + +@Configuration +public class RabbitListenerConfigurer implements org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer { + + static { + System.setProperty("spring.amqp.deserialization.trust.all", "true"); + } + + //以下配置RabbitMQ消息服务 + @Autowired + public ConnectionFactory connectionFactory; + + + /** + * 处理器方法工厂 + * @return + */ + @Bean + public DefaultMessageHandlerMethodFactory handlerMethodFactory() { + DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); + // 这里的转换器设置实现了 通过 @Payload 注解 自动反序列化message body + factory.setMessageConverter(new MappingJackson2MessageConverter()); + return factory; + } + + @Override + public void configureRabbitListeners(RabbitListenerEndpointRegistrar rabbitListenerEndpointRegistrar) { + rabbitListenerEndpointRegistrar.setMessageHandlerMethodFactory(handlerMethodFactory()); + } + +} + diff --git a/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..189ea2c --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.muyu.common.rabbit.RabbitListenerConfigurer \ No newline at end of file diff --git a/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/configure/FastJson2JsonRedisSerializer.java b/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/configure/FastJson2JsonRedisSerializer.java index 5959aad..f575143 100644 --- a/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/configure/FastJson2JsonRedisSerializer.java +++ b/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/configure/FastJson2JsonRedisSerializer.java @@ -9,6 +9,7 @@ import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.SerializationException; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; /** * Redis使用FastJson序列化 @@ -16,7 +17,8 @@ import java.nio.charset.Charset; * @author muyu */ public class FastJson2JsonRedisSerializer implements RedisSerializer { - public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR); diff --git a/cloud-common/pom.xml b/cloud-common/pom.xml index 1db526f..d00dfc6 100644 --- a/cloud-common/pom.xml +++ b/cloud-common/pom.xml @@ -19,6 +19,7 @@ cloud-common-datasource cloud-common-system cloud-common-xxl + cloud-common-rabbit cloud-common diff --git a/cloud-modules/cloud-modules-system/pom.xml b/cloud-modules/cloud-modules-system/pom.xml index 994df2c..4116679 100644 --- a/cloud-modules/cloud-modules-system/pom.xml +++ b/cloud-modules/cloud-modules-system/pom.xml @@ -76,6 +76,11 @@ com.muyu cloud-common-xxl + + + com.muyu + cloud-common-rabbit + diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/rabbit/RabbitTest.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/rabbit/RabbitTest.java new file mode 100644 index 0000000..791711f --- /dev/null +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/rabbit/RabbitTest.java @@ -0,0 +1,53 @@ +package com.muyu.system.rabbit; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.system.domain.SysConfig; +import jakarta.annotation.PostConstruct; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Log4j2 +@RestController +@RequestMapping("/rabbit/test") +public class RabbitTest { + + @Autowired + private RabbitTemplate rabbitTemplate; + + @Bean + public Queue initQueue(){ + return new Queue("rabbit.test.init"); + } + + @RabbitListener(queues = "rabbit.test.init") + public void msg(SysConfig sysConfig){ + log.info("消息队列:[{}], 消息内容:[{}]", "rabbit.test.init", JSONObject.toJSONString(sysConfig)); + } + + @PostConstruct + public void init(){ + new Thread(() -> { + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + SysConfig sysConfig = SysConfig.builder() + .configId(1L) + .configKey("ceshi-key") + .configName("测试名称") + .configType("测试类型") + .configValue("测试值") + .build(); + rabbitTemplate.convertAndSend("rabbit.test.init",sysConfig); + }).start(); + } + +} diff --git a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml index 6df6d3e..b5e11d5 100644 --- a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml @@ -8,9 +8,13 @@ nacos: user-name: nacos password: nacos namespace: muyu-cloud - +# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring spring: + amqp: + deserialization: + trust: + all: true main: allow-bean-definition-overriding: true application: @@ -49,6 +53,8 @@ spring: - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # xxl-job 配置文件 - application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # rabbit 配置文件 + - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} logging: level: com.muyu.system.mapper: DEBUG \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0aa75ce..b30f0df 100644 --- a/pom.xml +++ b/pom.xml @@ -259,6 +259,13 @@ cloud-common-xxl ${muyu.version} + + + + com.muyu + cloud-common-rabbit + ${muyu.version} +