liudongzhi 1 месяц назад
Родитель
Сommit
c5e48bb1dc

+ 21 - 18
alien-config/src/main/java/shop/alien/config/RabbitMq/RabbitMQConfig.java

@@ -35,6 +35,13 @@ public class RabbitMQConfig {
     @Value("${spring.rabbitmq.virtual-host}")
     private String virtualHost;
 
+    // 可选配置:连接超时和心跳(如果配置文件中没有,使用默认值)
+    @Value("${spring.rabbitmq.connection-timeout:15000}")
+    private int connectionTimeout;
+
+    @Value("${spring.rabbitmq.requested-heartbeat:60}")
+    private int requestedHeartbeat;
+
     /**
      * 连接工厂
      */
@@ -47,6 +54,10 @@ public class RabbitMQConfig {
         factory.setPassword(password);
         factory.setVirtualHost(virtualHost);
         
+        // 连接超时和心跳配置
+        factory.getRabbitConnectionFactory().setConnectionTimeout(connectionTimeout);
+        factory.getRabbitConnectionFactory().setRequestedHeartbeat(requestedHeartbeat);
+        
         // 启用发布确认和返回
         factory.setPublisherConfirms(true);
         factory.setPublisherReturns(true);
@@ -55,7 +66,8 @@ public class RabbitMQConfig {
         factory.setChannelCacheSize(25); // 缓存通道数量
         factory.setConnectionCacheSize(1); // 连接缓存数量
         
-        logger.info("RabbitMQ 连接工厂配置完成 - Host: {}, Port: {}, VirtualHost: {}", host, port, virtualHost);
+        logger.info("RabbitMQ 连接工厂配置完成 - Host: {}, Port: {}, VirtualHost: {}, ConnectionTimeout: {}ms, Heartbeat: {}s", 
+                host, port, virtualHost, connectionTimeout, requestedHeartbeat);
         return factory;
     }
 
@@ -84,25 +96,16 @@ public class RabbitMQConfig {
             }
         });
 
-        // 设置返回回调 - 消息无法路由到队列时的回调
-//        rabbitTemplate.setReturnsCallback(returnedMessage -> {
-//            logger.warn("消息被退回 - Exchange: {}, RoutingKey: {}, ReplyCode: {}, ReplyText: {}, Message: {}",
-//                    returnedMessage.getExchange(),
-//                    returnedMessage.getRoutingKey(),
-//                    returnedMessage.getReplyCode(),
-//                    returnedMessage.getReplyText(),
-//                    new String(returnedMessage.getMessage().getBody()));
-//        });
-
-        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
-            if (!ack) {
-                logger.error("消息发送失败到交换机,原因: {}, correlationData: {}", cause, correlationData);
-            }
+        // 设置返回回调 - 消息无法路由到队列时的回调(兼容 Spring Boot 2.3.2)
+        rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> {
+            logger.warn("消息被退回 - Exchange: {}, RoutingKey: {}, ReplyCode: {}, ReplyText: {}, Message: {}",
+                    exchange,
+                    routingKey,
+                    replyCode,
+                    replyText,
+                    new String(message.getBody()));
         });
 
-
-
-
         // 设置强制标志,确保消息无法路由时触发返回回调
         rabbitTemplate.setMandatory(true);