Explorar o código

:green_heart: 解决RabbitMQ配置文件中消息确认机制配置不起作用的问题

Twelve615 hai 1 ano
pai
achega
798e17f6d5

+ 3 - 3
airport/jeecg-boot-module-system/pom.xml

@@ -159,7 +159,7 @@
             </plugin>
             <!-- 漏洞扫描插件 -->
             <!-- 配置参考地址:https://jeremylong.github.io/DependencyCheck/dependency-check-maven/configuration.html -->
-            <plugin>
+            <!--<plugin>
                 <groupId>org.owasp</groupId>
                 <artifactId>dependency-check-maven</artifactId>
                 <executions>
@@ -177,11 +177,11 @@
                     </formats>
                     <prettyPrint>true</prettyPrint>
                     <suppressionFiles>
-                    <!-- 抑制文件 -->
+                    &lt;!&ndash; 抑制文件 &ndash;&gt;
                         <suppressionFile>${project.basedir}/src/main/resources/suppression/custmoize-supperssion.xml</suppressionFile>
                     </suppressionFiles>
                 </configuration>
-            </plugin>
+            </plugin>-->
         </plugins>
     </build>
     <!--	<build>-->

+ 2 - 2
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/ImfMqListener.java

@@ -46,8 +46,8 @@ public class ImfMqListener extends BaseRabbiMqHandler<Object> {
         System.out.println("¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ImfMqListener创建了¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥");
     }
 
-
-    @RabbitListener(queues = "acdmMsg")
+    //由于spring boot 升级到了 2.7 rabbitMQ配置文件中 手动消息确认配置不知为何不起作用,所以一定要在注解上加上 ackMode = "MANUAL" 将消息确认机制改为手动,否则每条消息都会抛出异常同时重启客户端
+    @RabbitListener(queues = "acdmMsg", ackMode = "MANUAL")
     public void onMessage3(Message message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {
         super.onMessage(message, deliveryTag, channel, new MqListener<Message>() {
             @Override

+ 15 - 0
airport/jeecg-boot-module-system/src/main/resources/application-dev.yml

@@ -59,6 +59,21 @@ spring:
           max-attempts: 3 #重试最大次数
           max-interval: 3000ms #最大重试间隔时间
           initial-interval: 2000ms #重试间隔时间
+      direct:
+        # 每次从RabbitMQ获取的消息数量
+        prefetch: 1
+        default-requeue-rejected: false
+        # 每个队列启动的消费者数量
+        concurrency: 1
+        # 每个队列最大的消费者数量
+        max-concurrency: 1
+        # 签收模式为手动签收-那么需要在代码中手动ACK,消息确认方式,其有三种配置方式,分别是none、manual(手动ack) 和auto(自动ack) 默认auto
+        acknowledge-mode: manual
+        retry:
+          enabled: true # 消费者是否支持重试
+          max-attempts: 3 #重试最大次数
+          max-interval: 3000ms #最大重试间隔时间
+          initial-interval: 2000ms #重试间隔时间
     # 配置RabbitMQ服务器>>>>>>集群配置
     #  rabbitmq:
     #    addresses: localhost:5671,localhost:5672,localhost:5673

+ 17 - 2
airport/jeecg-boot-module-system/src/main/resources/application-local.yml

@@ -57,6 +57,21 @@ spring:
           max-attempts: 3 #重试最大次数
           max-interval: 3000ms #最大重试间隔时间
           initial-interval: 2000ms #重试间隔时间
+      direct:
+        # 每次从RabbitMQ获取的消息数量
+        prefetch: 1
+        default-requeue-rejected: false
+        # 每个队列启动的消费者数量
+        concurrency: 1
+        # 每个队列最大的消费者数量
+        max-concurrency: 1
+        # 签收模式为手动签收-那么需要在代码中手动ACK,消息确认方式,其有三种配置方式,分别是none、manual(手动ack) 和auto(自动ack) 默认auto
+        acknowledge-mode: manual
+        retry:
+          enabled: true # 消费者是否支持重试
+          max-attempts: 3 #重试最大次数
+          max-interval: 3000ms #最大重试间隔时间
+          initial-interval: 2000ms #重试间隔时间
     # 配置RabbitMQ服务器>>>>>>集群配置
     #  rabbitmq:
     #    addresses: localhost:5671,localhost:5672,localhost:5673
@@ -111,7 +126,7 @@ spring:
             instanceName: MyScheduler
             instanceId: AUTO
           jobStore:
-            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
             driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
             tablePrefix: QRTZ_
             isClustered: true
@@ -396,4 +411,4 @@ third-app:
       client-id: ??
       # appSecret
       client-secret: ??
-      agent-id: ??
+      agent-id: ??

+ 15 - 0
airport/jeecg-boot-module-system/src/main/resources/application-prod.yml

@@ -66,6 +66,21 @@ spring:
           max-attempts: 3 #重试最大次数
           max-interval: 3000ms #最大重试间隔时间
           initial-interval: 2000ms #重试间隔时间
+      direct:
+        # 每次从RabbitMQ获取的消息数量
+        prefetch: 1
+        default-requeue-rejected: false
+        # 每个队列启动的消费者数量
+        concurrency: 1
+        # 每个队列最大的消费者数量
+        max-concurrency: 1
+        # 签收模式为手动签收-那么需要在代码中手动ACK,消息确认方式,其有三种配置方式,分别是none、manual(手动ack) 和auto(自动ack) 默认auto
+        acknowledge-mode: manual
+        retry:
+          enabled: true # 消费者是否支持重试
+          max-attempts: 3 #重试最大次数
+          max-interval: 3000ms #最大重试间隔时间
+          initial-interval: 2000ms #重试间隔时间
     # 配置RabbitMQ服务器>>>>>>集群配置
     #  rabbitmq:
     #    addresses: localhost:5671,localhost:5672,localhost:5673