From d0ebd33f5e4fdbff1f58a1af137d45b405366399 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 28 六月 2024 16:00:03 +0800 Subject: [PATCH] rabbitmq --- src/main/java/com/ycl/jxkg/rabbitmq/product/Product.java | 33 ++++++ src/main/java/com/ycl/jxkg/rabbitmq/MyCorrelationData.java | 27 +++++ src/main/java/com/ycl/jxkg/rabbitmq/RabbitMQConfig.java | 91 ++++++++++++++++++ src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java | 33 ++++++ src/main/resources/application-dev.yml | 19 +++ src/main/resources/application-prod.yml | 19 +++ pom.xml | 6 + src/main/java/com/ycl/jxkg/rabbitmq/RabbitMqMsgTypeEnum.java | 19 +++ 8 files changed, 247 insertions(+), 0 deletions(-) diff --git a/pom.xml b/pom.xml index 81ae332..4bf0f97 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,12 @@ <dependencies> + <!-- rabbitmq --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-amqp</artifactId> + </dependency> + <!-- websocket --> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/src/main/java/com/ycl/jxkg/rabbitmq/MyCorrelationData.java b/src/main/java/com/ycl/jxkg/rabbitmq/MyCorrelationData.java new file mode 100644 index 0000000..ccadd91 --- /dev/null +++ b/src/main/java/com/ycl/jxkg/rabbitmq/MyCorrelationData.java @@ -0,0 +1,27 @@ +package com.ycl.jxkg.rabbitmq; + +import lombok.Data; +import org.springframework.amqp.rabbit.connection.CorrelationData; + +/** + * 鎵╁睍鍏宠仈鏁版嵁 + * + * @author xp + * @data 2023/11/11 + */ +@Data +public class MyCorrelationData extends CorrelationData { + + /** + * 娑堟伅绫诲瀷锛屽彲鐢ㄤ簬涓氬姟澶勭悊 + */ + private RabbitMqMsgTypeEnum msgType; + + + public MyCorrelationData(String id, RabbitMqMsgTypeEnum msgType) { + super(id); + this.msgType = msgType; + } + + +} diff --git a/src/main/java/com/ycl/jxkg/rabbitmq/RabbitMQConfig.java b/src/main/java/com/ycl/jxkg/rabbitmq/RabbitMQConfig.java new file mode 100644 index 0000000..91bf54c --- /dev/null +++ b/src/main/java/com/ycl/jxkg/rabbitmq/RabbitMQConfig.java @@ -0,0 +1,91 @@ +package com.ycl.jxkg.rabbitmq; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author锛歺p + * @date锛�2024/6/28 13:39 + */ +@Slf4j +@Configuration +public class RabbitMQConfig { + + @Autowired + private ConnectionFactory connectionFactory; + + // 鍒涘缓鏅�氶槦鍒� + @Bean + public Queue examQueue() { + Map<String, Object> args = new HashMap<>(); + // 璁剧疆姝讳俊浜ゆ崲鏈� + args.put("x-dead-letter-exchange", "dlxExchange"); + return new Queue("jxkg", true, false, false, args); + } + + // 鍒涘缓姝讳俊浜ゆ崲鏈� + @Bean + public DirectExchange dlxExchange() { + return new DirectExchange("dlxExchange"); + } + + // 鍒涘缓鑰冭瘯浣跨敤鐨勬淇¢槦鍒� + @Bean + public Queue examDlxQueue() { + return new Queue("examDlxQueue", true); + } + + // 鍒涘缓浼氳浣跨敤鐨勬淇¢槦鍒� + @Bean + public Queue meetDlxQueue() { + return new Queue("meetDlxQueue", true); + } + + // 缁戝畾鑰冭瘯姝讳俊闃熷垪鍒版淇′氦鎹㈡満 + @Bean + public Binding examDlxBinding(Queue examDlxQueue, DirectExchange dlxExchange) { + return BindingBuilder.bind(examDlxQueue).to(dlxExchange).with("exam"); + } + + // 缁戝畾浼氳姝讳俊闃熷垪鍒版淇′氦鎹㈡満 + @Bean + public Binding meetDlxBinding(Queue meetDlxQueue, DirectExchange dlxExchange) { + return BindingBuilder.bind(meetDlxQueue).to(dlxExchange).with("meet"); + } + + @Bean + public RabbitTemplate rabbitTemplate() { + RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + + // 璁剧疆鍥為��鍥炶皟锛屽彧鑳藉叏灞�璁剧疆涓�涓� + rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> { + log.error("娑堟伅鍙戦�佸け璐ワ紝鐩爣浜ゆ崲鏈猴細{}锛岃矾鐢憋細{}锛岄敊璇俊鎭細{}", exchange, routingKey, replyText); + }); + // 璁剧疆纭鍥炶皟锛屽叏灞�璁剧疆涓�涓紝鏍规嵁鍏宠仈鏁版嵁(CorrelationData)杩涜瀵瑰簲澶勭悊 + rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { + if (ack) { + MyCorrelationData myCorrelationData = (MyCorrelationData) correlationData; + System.out.println(myCorrelationData); + // 鎴愬姛 + log.info("娑堟伅鎴愬姛鍙戦�佸埌浜ゆ崲鏈�"); + } else { + // 澶辫触 + // todo 鏍规嵁娑堟伅涓嶅悓锛屽鐞嗕笉鍚� + log.error("娑堟伅鍙戦�佸け璐�"); + } + }); + return rabbitTemplate; + } + +} diff --git a/src/main/java/com/ycl/jxkg/rabbitmq/RabbitMqMsgTypeEnum.java b/src/main/java/com/ycl/jxkg/rabbitmq/RabbitMqMsgTypeEnum.java new file mode 100644 index 0000000..6e53774 --- /dev/null +++ b/src/main/java/com/ycl/jxkg/rabbitmq/RabbitMqMsgTypeEnum.java @@ -0,0 +1,19 @@ +package com.ycl.jxkg.rabbitmq; + +import lombok.Getter; + +/** + * mq娑堟伅绫诲瀷 + * + * @author xp + * @data 2023/11/11 + */ +@Getter +public enum RabbitMqMsgTypeEnum { + + + EXAM, + MEET + ; + +} diff --git a/src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java b/src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java new file mode 100644 index 0000000..d99cb71 --- /dev/null +++ b/src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java @@ -0,0 +1,33 @@ +package com.ycl.jxkg.rabbitmq.consumer; + +import org.springframework.amqp.rabbit.annotation.*; +import org.springframework.stereotype.Component; + +/** + * @author锛歺p + * @date锛�2024/6/28 11:51 + */ +@Component +public class Consumer { + + /** + * 鑰冭瘯鐘舵�佹洿鏂扮殑娑堣垂鑰� + * + * @param message + */ + @RabbitListener(queues = "examDlxQueue") + public void examStatusAdjustConsumer(String message){ + System.out.println(message); + } + + + /** + * 浼氳娑堣垂鑰� + * + * @param message + */ + @RabbitListener(queues = "meetDlxQueue") + public void meetConsumer(String message){ + System.out.println(message); + } +} diff --git a/src/main/java/com/ycl/jxkg/rabbitmq/product/Product.java b/src/main/java/com/ycl/jxkg/rabbitmq/product/Product.java new file mode 100644 index 0000000..e3585e8 --- /dev/null +++ b/src/main/java/com/ycl/jxkg/rabbitmq/product/Product.java @@ -0,0 +1,33 @@ +package com.ycl.jxkg.rabbitmq.product; + +import com.ycl.jxkg.rabbitmq.MyCorrelationData; +import com.ycl.jxkg.rabbitmq.RabbitMqMsgTypeEnum; +import lombok.RequiredArgsConstructor; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.core.MessageProperties; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +import java.nio.charset.StandardCharsets; + +/** + * @author锛歺p + * @date锛�2024/6/28 11:18 + */ +@Component +@RequiredArgsConstructor +public class Product { + + private final RabbitTemplate rabbitTemplate; + + public void examMsg() { + // 璁剧疆娑堟伅鐨勫叧鑱旀暟鎹紝浠ヤ究鍙戦�佺‘璁ゅ洖璋冦�佹湭璺敱鎴愬姛娑堟伅鐨勫鐞� + MyCorrelationData msgCorrelationData = new MyCorrelationData("ddddd", RabbitMqMsgTypeEnum.EXAM); + rabbitTemplate.convertAndSend("examDlxQueue", (Object) "浣犲ソ锛孯abbitMQ", msgCorrelationData); + } + + public void meetMsg() { + rabbitTemplate.convertAndSend("meetDlxQueue","浣犲ソ锛孯abbitMQ"); + } + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index aa3c857..2273f85 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -11,3 +11,22 @@ username: root password: 321$YcYl@1970! driver-class-name: com.mysql.cj.jdbc.Driver + rabbitmq: + host: 101.35.247.188 + username: ycl + password: ycl@2024 + virtual-host: jxkg + port: 5672 + publisher-confirms: true # 寮�鍚敓浜ц�呭彂閫佺‘璁� + publisher-returns: true # 寮�鍚敓浜ц�呭彂閫佸け璐ラ��鍥� + listener: + simple: + default-requeue-rejected: false # 鍏抽棴榛樿鎷掔粷娑堣垂鏃剁殑閲嶆柊鍏ラ槦锛屾垜浠娇鐢ㄦ湰鍦伴噸璇曟秷璐� + # 纭妯″紡锛氭墜鍔紝寮�鍚簡灏卞繀椤诲湪浠g爜涓墜鍔ㄧ‘璁わ紝鍚﹀垯娑堟伅浼氫竴鐩撮噸澶嶆秷璐广�� + # 寮�鍚簡閲嶈瘯灏卞簲璇ヨ缃负鑷姩纭锛屽洜涓烘墜鍔ㄧ‘璁ら渶瑕佹崟鑾峰紓甯革紝鑰岄噸璇曞氨鏄彂鐢熷紓甯告墠浼氶噸璇� + acknowledge-mode: manual + retry: + enabled: true # 娑堣垂鏃跺嚭鐜板紓甯歌繘琛岄噸璇曟秷璐癸紝娉ㄦ剰涓嶈兘琚崟鑾凤紝鍚﹀垯鏃犳硶閲嶈瘯 + max-attempts: 3 # 鏈�澶ч噸璇曟鏁� + initial-interval: 3000 # 鍒濇閲嶈瘯绛夊緟闂撮殧 + multiplier: 2 # 閲嶈瘯澶辫触鍚庯紝涓嬫绛夊緟鏃堕棿澧炲姞澶氬皯鍊嶃�� diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 96c377f..a342da9 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -11,3 +11,22 @@ username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver + rabbitmq: + host: 101.35.247.188 + username: ycl + password: ycl@2024 + virtual-host: jxkg + port: 5672 + publisher-confirms: true # 寮�鍚敓浜ц�呭彂閫佺‘璁� + publisher-returns: true # 寮�鍚敓浜ц�呭彂閫佸け璐ラ��鍥� + listener: + simple: + default-requeue-rejected: false # 鍏抽棴榛樿鎷掔粷娑堣垂鏃剁殑閲嶆柊鍏ラ槦锛屾垜浠娇鐢ㄦ湰鍦伴噸璇曟秷璐� + # 纭妯″紡锛氭墜鍔紝寮�鍚簡灏卞繀椤诲湪浠g爜涓墜鍔ㄧ‘璁わ紝鍚﹀垯娑堟伅浼氫竴鐩撮噸澶嶆秷璐广�� + # 寮�鍚簡閲嶈瘯灏卞簲璇ヨ缃负鑷姩纭锛屽洜涓烘墜鍔ㄧ‘璁ら渶瑕佹崟鑾峰紓甯革紝鑰岄噸璇曞氨鏄彂鐢熷紓甯告墠浼氶噸璇� + acknowledge-mode: manual + retry: + enabled: true # 娑堣垂鏃跺嚭鐜板紓甯歌繘琛岄噸璇曟秷璐癸紝娉ㄦ剰涓嶈兘琚崟鑾凤紝鍚﹀垯鏃犳硶閲嶈瘯 + max-attempts: 3 # 鏈�澶ч噸璇曟鏁� + initial-interval: 3000 # 鍒濇閲嶈瘯绛夊緟闂撮殧 + multiplier: 2 # 閲嶈瘯澶辫触鍚庯紝涓嬫绛夊緟鏃堕棿澧炲姞澶氬皯鍊嶃�� -- Gitblit v1.8.0