|
|
@@ -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);
|
|
|
|