欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【RabbitMQ】10-抽取MQ工具

【RabbitMQ】10-抽取MQ工具

2025/5/4 21:06:07 来源:https://blog.csdn.net/qq_45722630/article/details/143775768  浏览:    关键词:【RabbitMQ】10-抽取MQ工具

1. Nacos共享配置

shared-mq.yaml

spring:rabbitmq:host: ${hm.mq.host:*.*.*.*} # 你的虚拟机IPport: ${hm.mq.port:5672} # 端口virtual-host: ${hm.mq.vhost:/hmall} # 虚拟主机username: ${hm.mq.un:hmall} # 用户名password: ${hm.mq.pw:***} # 密码

2. Common包下引入依赖

<!--AMQP依赖-->
<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-amqp</artifactId><scope>provided</scope>
</dependency>
<!--Spring整合Rabbit依赖-->
<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><scope>provided</scope>
</dependency>
<!--json处理-->
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><scope>provided</scope>
</dependency>

3. RabbitMqHelper工具类

@Slf4j
@AllArgsConstructor
public class RabbitMqHelper {private final RabbitTemplate rabbitTemplate;public void sendMessage(String exchange, String routingKey, Object msg) {log.debug("即将发送消息:exchange:{}, routingKey:{}, msg{}", exchange, routingKey, msg);rabbitTemplate.convertAndSend(exchange, routingKey, msg);log.info("发送消息成功");}public void sendDelayMessage(String exchange, String routingKey, Object msg, int delay) {log.debug("准备发送延迟消息:exchange:{}, routingKey:{}, msg:{}, delay:{}", exchange, routingKey, msg, delay);rabbitTemplate.convertAndSend(exchange, routingKey, msg, message -> {message.getMessageProperties().setDelay(delay);return message;});log.info("发送延迟消息成功");}public void sendMessageWithConfirm(String exchange, String routingKey, Object msg, int maxRetries) {log.debug("准备发送消息:exchange:{}, routingKey:{}, msg:{}, maxRetries:{}", exchange, routingKey, msg, maxRetries);CorrelationData cd = new CorrelationData(UUID.randomUUID().toString());cd.getFuture().addCallback(new ListenableFutureCallback<CorrelationData.Confirm>() {int retryCount;@Overridepublic void onFailure(Throwable ex) {log.error("处理ack回收失败", ex);}@Overridepublic void onSuccess(CorrelationData.Confirm result) {if (result != null && !result.isAck()) {log.debug("消息发送失败,收到nack,已重试:{}", retryCount);if (retryCount >= maxRetries) {log.error("消息发送重试次数耗尽,发送失败");return;}}}});rabbitTemplate.convertAndSend(exchange, routingKey, msg, cd);log.info("发送确认消息成功");}
}

3. 自动装配

@Configuration
@ConditionalOnClass(value = {MessageConverter.class, RabbitTemplate.class})
public class MqConfig {@Bean@ConditionalOnBean(ObjectMapper.class)public MessageConverter messageConverter(ObjectMapper mapper) {Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(mapper);jackson2JsonMessageConverter.setCreateMessageIds(true);return jackson2JsonMessageConverter;}@Beanpublic RabbitMqHelper rabbitMqHelper(RabbitTemplate rabbitTemplate) {return new RabbitMqHelper(rabbitTemplate);}
}

4. 配置扫描

在spring.factories设置

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.hmall.common.config.MyBatisConfig,\com.hmall.common.config.MvcConfig,\com.hmall.common.config.MqConfig,\com.hmall.common.config.JsonConfig

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词