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