怎样理解RabbitMQ 3.9.7镜像模式集群与Springboot 2.5.5
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,怎样理解RabbitMQ 3.9.7镜像模式集群与Springboot 2.5.5,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 概
千家信息网最后更新 2025年01月17日怎样理解RabbitMQ 3.9.7镜像模式集群与Springboot 2.5.5
怎样理解RabbitMQ 3.9.7镜像模式集群与Springboot 2.5.5,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
1. 概述
老话说的好:做人要懂得变通,善于思考,有时稍微转个弯,也许问题就解决了。
言归正传,之前我们聊了 RabbitMQ 3.9.7 镜像模式集群的搭建,今天我们来聊聊 RabbitMQ 3.9.7 镜像模式集群与Springboot 2.5.5 整合。
2. 场景说明
服务器A IP:192.168.1.22
服务器B IP:192.168.1.8
服务器C IP:192.168.1.144
此三台服务器上已搭建好了 RabbitMQ镜像模式集群,镜像模式集群的搭建,可参见我的上一篇文章。
3. 与Springboot的整合
3.1 引入依赖
org.springframework.boot spring-boot-starter-parent 2.5.5
org.springframework.boot spring-boot-starter-amqp
3.2 生产服务配置
spring: rabbitmq: addresses: 192.168.1.22:5672,192.168.1.8:5672,192.168.1.144:5672 username: guest password: guest virtual-host: / connection-timeout: 16000 # 启用消息确认模式 publisher-confirm-type: correlated # 启用 return 消息模式 publisher-returns: true template: mandatory: true
3.3 生产服务代码
import org.springframework.amqp.AmqpException;import org.springframework.amqp.core.MessagePostProcessor;import org.springframework.amqp.rabbit.connection.CorrelationData;import org.springframework.amqp.rabbit.core.RabbitTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.messaging.Message;import org.springframework.messaging.MessageHeaders;import org.springframework.messaging.support.MessageBuilder;import org.springframework.stereotype.Component;import java.util.Map;@Componentpublic class Producer { @Autowired private RabbitTemplate rabbitTemplate; /** * 确认回调 */ final RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() { @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { // correlationData 唯一标识 // ack mq是否收到消息 // cause 失败原因 System.out.println("correlationData:" + correlationData.getId()); System.out.println("ack:" + ack); System.out.println("cause:" + cause); } }; /** * 发送消息 * @param messageBody 消息体 * @param headers 附加属性 * @throws Exception */ public void sendMessage(String messageBody, Mapheaders, String id) throws Exception { MessageHeaders messageHeaders = new MessageHeaders(headers); Message message = MessageBuilder.createMessage(messageBody, messageHeaders); rabbitTemplate.setConfirmCallback(confirmCallback); String exchangeName = "exchange-hello"; String routingKey = "test.123"; CorrelationData correlationData = new CorrelationData(id); rabbitTemplate.convertAndSend(exchangeName, routingKey, message, new MessagePostProcessor() { /** * 发送消息后做的事情 * @param message * @return * @throws AmqpException */ @Override public org.springframework.amqp.core.Message postProcessMessage(org.springframework.amqp.core.Message message) throws AmqpException { return message; } }, correlationData); }}
3.4 消费服务配置
spring: rabbitmq: addresses: 192.168.1.22:5672,192.168.1.8:5672,192.168.1.144:5672 username: guest password: guest virtual-host: / connection-timeout: 16000 listener: simple: # 设置为手工ACK acknowledge-mode: manual concurrency: 5 prefetch: 1 max-concurrency: 10
3.5 消费服务代码
import com.rabbitmq.client.Channel;import org.springframework.amqp.rabbit.annotation.*;import org.springframework.amqp.support.AmqpHeaders;import org.springframework.messaging.Message;import org.springframework.stereotype.Component;@Componentpublic class Consumer { @RabbitListener(bindings = @QueueBinding( value = @Queue(value = "queue-hello", durable = "true"), exchange = @Exchange(value = "exchange-hello" , durable = "true", type = "topic"), key = "test.*" )) @RabbitHandler public void onMessage(Message message, Channel channel) throws Exception { System.out.println("收到消息:" + message.getPayload()); Long deliveryTag = (Long)message.getHeaders().get(AmqpHeaders.DELIVERY_TAG); channel.basicAck(deliveryTag, false); }}
3.6 Rest 测试代码
@RestController@RequestMapping("/mq")public class RabbitmqController { @Autowired private Producer producer; @GetMapping("/sendMessage") public String sendMessage(@RequestParam String messageBody, @RequestParam String id) throws Exception { Mapheaders = new HashMap<>(); producer.sendMessage(messageBody, headers, id); return "success"; }}
看完上述内容,你们掌握怎样理解RabbitMQ 3.9.7镜像模式集群与Springboot 2.5.5的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
模式
服务
消息
镜像
集群
服务器
代码
问题
内容
原因
方法
更多
服务配置
篇文章
整合
消费
生产
配置
束手无策
言归正传
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
畅达车连网络技术有限公司
增城网络安全运维公司
ef备份数据库
未来计算机网络技术的发展
无锡光学设计软件开发公司
饿了吗服务器未知异常
查找个数最多的数据库
ssh服务器怎么重启
德国视觉软件开发平台
北京超卡互联网科技
乡镇网络安全应急工作
斑马网络技术有限公司工作环境
数据库中课程表下教室的简称
网络安全对抗队名
怎么看服务器哪个硬盘坏了
关于网络安全的串词
什么是dns服务器地址怎么知道
服务器管理好牌子推荐
阿里云服务器操作系统
乌市千信乐通网络技术有限公司
ef备份数据库
hbase分布式数据库的应用
网络安全协调联动机制
金蝶12.3用的数据库
硬防服务器价格
弘瑞网络技术改套餐
阿里云数据库恢复初始密码
泰安app软件开发电话
服务器硬盘的使用
数据库视图能创建索引吗