万能RabbitTemplate使用模板
文章目录
- 前言
- 一、RabbitMqConfig
- 二、RabbitmqSend
- 三、MsgReceiver
- 四、MsgReceiverB
- 总结
前言
类的介绍:
- RabbitMqConfig:消息队列配置类,包括拿到application的配置,定义队列,交换机,交换机绑定队列指定routingkey
- RabbitmqSend:消息发送类,使用时直接将此自动注入然后使用,主要的方法就是将消息放入每个routkey指定的队列中
- MsgReceiver:负责接受消息并处理他们
一、RabbitMqConfig
@Configuration
@PropertySource("classpath:application.properties")//指定配置文件
public class RabbitMqConfig {// @Value("${spring.rabbitmq.host}")private String host="127.0.0.1";//@Value("${spring.rabbitmq.port}")private int port=5672;//@Value("${spring.rabbitmq.username}")private String username="guest";//@Value("${spring.rabbitmq.password}")private String password="guest";public static final String EXCHANGE_A = "my-mq-exchange_A";public static final String EXCHANGE_B = "my-mq-exchange_B";public static final String QUEUE_A = "QUEUE_A";public static final String QUEUE_B = "QUEUE_B";public static final String ROUTINGKEY_A = "spring-boot-routingKey_A";public static final String ROUTINGKEY_B = "spring-boot-routingKey_B";//创建连接工厂@Beanpublic CachingConnectionFactory connectionFactory() {CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host,port);connectionFactory.setUsername(username);connectionFactory.setPassword(password);connectionFactory.setVirtualHost("/");connectionFactory.setPublisherConfirms(true);return connectionFactory;}@Bean@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)//必须是prototype类型public RabbitTemplate rabbitTemplate() {RabbitTemplate template = new RabbitTemplate(connectionFactory());return template;}/*** * 针对消费者配置* * 1. 设置交换机类型* * 2. 将队列绑定到交换机* FanoutExchange: 将消息分发到所有的绑定队列,无routingkey的概念* HeadersExchange :通过添加属性key-value匹配* DirectExchange:按照routingkey分发到指定队列* TopicExchange:多关键字匹配*///声明交换机@Beanpublic DirectExchange defaultExchange() {return new DirectExchange(EXCHANGE_A);}@Beanpublic DirectExchange defaultExchange1() {return new DirectExchange(EXCHANGE_B);}//声明队列@Beanpublic Queue queueA() {return new Queue(QUEUE_A, true); //队列持久:不会随着服务器重启造成丢失}@Beanpublic Queue queueB() {return new Queue(QUEUE_B, true); //队列持久}//队列绑定交换机,指定routingkey@Beanpublic Binding binding() {//绑定队列到交换机上通过路由return BindingBuilder.bind(queueA()).to(defaultExchange()).with(RabbitMqConfig.ROUTINGKEY_A);}@Beanpublic Binding bindingb() {return BindingBuilder.bind(queueB()).to(defaultExchange1()).with(RabbitMqConfig.ROUTINGKEY_B);}
}
二、RabbitmqSend
@Component
public class RabbitmqSend implements RabbitTemplate.ConfirmCallback {//由于rabbitTemplate的scope属性设置为ConfigurableBeanFactory.SCOPE_PROTOTYPE,所以不能自动注入private RabbitTemplate rabbitTemplate;/*** 构造方法注入rabbitTemplate,config的*/@Autowiredpublic RabbitmqSend(RabbitTemplate rabbitTemplate) {this.rabbitTemplate = rabbitTemplate;rabbitTemplate.setConfirmCallback(this); //rabbitTemplate如果为单例的话,那回调就是最后设置的内容}public void sendMsg(List<String> content) {CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());//把消息放入ROUTINGKEY_A对应的队列当中去,对应的是队列ArabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_A, RabbitMqConfig.ROUTINGKEY_A, content, correlationId);}public void sendMsgB(List<String> content) {CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());//把消息放入ROUTINGKEY_B对应的队列当中去,对应的是队列BrabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_B, RabbitMqConfig.ROUTINGKEY_B, content, correlationId);}/*** 回调*/@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {System.out.println(" 回调id:" + correlationData);if (ack) {System.out.println("消息成功消费");} else {System.out.println("消息消费失败:" + cause);}}
}
三、MsgReceiver
@Component
@RabbitListener(queues = RabbitMqConfig.QUEUE_A)
public class MsgReceiver {@RabbitHandlerpublic void process(List<String> content) {System.out.println("接收处理队列A当中的消息HASH: " + content);}
}
四、MsgReceiverB
@Component
@RabbitListener(queues = RabbitMqConfig.QUEUE_B)
public class MsgReceiverB {private final BaseFileshelfDao baseFileshelfDao;public MsgReceiverB( BaseFileshelfDao baseFileshelfDao) {this.baseFileshelfDao = baseFileshelfDao;}@RabbitHandlerpublic void processB(List<String> content) {String o = (String)content.get(0);String n=o.substring(2);System.out.println(n);baseFileshelfDao.updateGoodsById(n,(String)content.get(1));System.out.println("接收处理队列B当中的消息HASH: " + content);}
}
总结
总体来说过程就是那么几个
- 拿出配置文件
- 定义交换机,队列,路由
- 建立连接工厂
- 声明队列
- 绑定交换机与队列的关系
- 发送消息
- 把消息拿出来
万能RabbitTemplate使用模板相关推荐
- zblogPHP万能型主题模板希望V 1.5.3(Hopelee)
zblogPHP万能型主题模板希望(Hopelee),无授权,全开源,但是实际上这套主题已经可以说是非常不错了,不需要再费心思开发什么的. 首页调用默认侧栏,分类列表及其他(搜索.标签等)调用侧栏2, ...
- 初一计算机教案模板,初中信息技术万能教学设计模板.doc
初中信息技术万能教学设计模板.doc 初中信息技术万能教学设计模板 答:A"万能"教案书写模本 章节名称学科授课班级授课时数设计者所属学校本节(课)教学内容分析本节(课)教学目标知 ...
- 信捷XDPLC十轴(包含)及以下万能通用程序模板,用进制数据和S状态完美结合
信捷XDPLC十轴(包含)及以下万能通用程序模板,用进制数据和S状态完美结合. 各提示,报警,数据计算处理,再次细分. 通过十几年电气非标项目的自身摸索,结合日本,台湾,韩国等电气工程师同仁编程特点, ...
- ChatGPT:【万能话术模板】+99个提示词
一:万能话术提示模板 [方便观看版] [方便复制版] 现在你是一位[ ]创作者.你的任务是以[ ]为标题写一份[ ]的文章. 文章内容包含[ ] [ ] [ ...
- 淘宝设计万能PSD分层模板(简约页面设计——少即是多)
少即是多(less is more)的设计原则,这个原则的提出奠定了现代设计的基础.少即是多,简约而不简单是现代简约设计的核心,可以形容为用最精简的表现手段达到最好的效果,去掉多余的元素,颜色,形状和 ...
- ios静态库和代码同名_使用一个代码库开始制作NativeScript iOS和Android应用程序
ios静态库和代码同名 Users can choose whatever operating system they prefer, but every operating system use d ...
- C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)
目录 模板的概念 函数模板 函数模板的作用: 函数模板的语法: 解释: 示例: 总结: 函数模板注意事项 注意事项: 示例: 总结: 函数模板案例 案例描述: 示例: 普通函数与函数模板的区别 总结: ...
- 以计算机为主题的英语作文范例,英语作文范例,一篇万能英语作文范文。
有关绍兴名胜介绍的,水平在初一 万能英语作文写作参考模板:一.英语书信的常见写作模板 开头部分: How nice to hear from you again. Let me tell you so ...
- MATLAB 绘制论文图片格式设置万能代码模板
绘图在数学建模.撰写论文时是必不可少的,MATLAB 就是其中一个非常实用的工具.这次给大家分享一个我收藏并用了很久的万能MATLAB绘图模板,本人曾用这个模板绘制过数模国赛.美赛以及电磁杯论文中的绝 ...
最新文章
- 写出下列数学式对应的python表达式_Python程序设计课后习题答案-第一单元
- 五分钟内搭建的混沌电路
- Eclipse+Tomcat7.0+MySQL 连接池设置
- 从高斯分布的导出讲起——为什么概率密度函数长成这个样子?
- 思科路由和交换限制用户出外网的几种策略
- centos7.5 下LNMP搭建
- windows找不到文件gpedit.msc_电脑文件搜索神器,没有找不到的东西
- SpringCloud Sentinel 结合OpenFeign的使用介绍
- Xformode的坑
- Cesium入门-2-增加地形
- Java 在Word中创建表格
- openGauss开机自启动
- android ssl双向验证 X509证书信任管理器类的实现及应用
- 专家教你10个秘诀 70%癌症都能预防
- 出击BI SAP推全新业务分析应用行业软件
- 泰拉瑞亚手机版html,泰拉瑞亚提基套装怎么得 提基套装属性详解
- Maltab GUI课程设计——网络爬虫程序(基金连涨连跌提醒)
- 格式化数据方法 sanitize
- Zookeeper分布式锁遇到惊群效应如何解决
- GitLab: API is not accessible的错误解决