文章目录

  • 前言
  • 一、RabbitMqConfig
  • 二、RabbitmqSend
  • 三、MsgReceiver
  • 四、MsgReceiverB
  • 总结

前言

类的介绍:

  1. RabbitMqConfig:消息队列配置类,包括拿到application的配置,定义队列,交换机,交换机绑定队列指定routingkey
  2. RabbitmqSend:消息发送类,使用时直接将此自动注入然后使用,主要的方法就是将消息放入每个routkey指定的队列中
  3. 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);}
}

总结

总体来说过程就是那么几个

  1. 拿出配置文件
  2. 定义交换机,队列,路由
  3. 建立连接工厂
  4. 声明队列
  5. 绑定交换机与队列的关系
  6. 发送消息
  7. 把消息拿出来

万能RabbitTemplate使用模板相关推荐

  1. zblogPHP万能型主题模板希望V 1.5.3(Hopelee)

    zblogPHP万能型主题模板希望(Hopelee),无授权,全开源,但是实际上这套主题已经可以说是非常不错了,不需要再费心思开发什么的. 首页调用默认侧栏,分类列表及其他(搜索.标签等)调用侧栏2, ...

  2. 初一计算机教案模板,初中信息技术万能教学设计模板.doc

    初中信息技术万能教学设计模板.doc 初中信息技术万能教学设计模板 答:A"万能"教案书写模本 章节名称学科授课班级授课时数设计者所属学校本节(课)教学内容分析本节(课)教学目标知 ...

  3. 信捷XDPLC十轴(包含)及以下万能通用程序模板,用进制数据和S状态完美结合

    信捷XDPLC十轴(包含)及以下万能通用程序模板,用进制数据和S状态完美结合. 各提示,报警,数据计算处理,再次细分. 通过十几年电气非标项目的自身摸索,结合日本,台湾,韩国等电气工程师同仁编程特点, ...

  4. ChatGPT:【万能话术模板】+99个提示词

    一:万能话术提示模板 [方便观看版] [方便复制版] 现在你是一位[     ]创作者.你的任务是以[     ]为标题写一份[     ]的文章. 文章内容包含[     ] [     ] [   ...

  5. 淘宝设计万能PSD分层模板(简约页面设计——少即是多)

    少即是多(less is more)的设计原则,这个原则的提出奠定了现代设计的基础.少即是多,简约而不简单是现代简约设计的核心,可以形容为用最精简的表现手段达到最好的效果,去掉多余的元素,颜色,形状和 ...

  6. ios静态库和代码同名_使用一个代码库开始制作NativeScript iOS和Android应用程序

    ios静态库和代码同名 Users can choose whatever operating system they prefer, but every operating system use d ...

  7. C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)

    目录 模板的概念 函数模板 函数模板的作用: 函数模板的语法: 解释: 示例: 总结: 函数模板注意事项 注意事项: 示例: 总结: 函数模板案例 案例描述: 示例: 普通函数与函数模板的区别 总结: ...

  8. 以计算机为主题的英语作文范例,英语作文范例,一篇万能英语作文范文。

    有关绍兴名胜介绍的,水平在初一 万能英语作文写作参考模板:一.英语书信的常见写作模板 开头部分: How nice to hear from you again. Let me tell you so ...

  9. MATLAB 绘制论文图片格式设置万能代码模板

    绘图在数学建模.撰写论文时是必不可少的,MATLAB 就是其中一个非常实用的工具.这次给大家分享一个我收藏并用了很久的万能MATLAB绘图模板,本人曾用这个模板绘制过数模国赛.美赛以及电磁杯论文中的绝 ...

最新文章

  1. 写出下列数学式对应的python表达式_Python程序设计课后习题答案-第一单元
  2. 五分钟内搭建的混沌电路
  3. Eclipse+Tomcat7.0+MySQL 连接池设置
  4. 从高斯分布的导出讲起——为什么概率密度函数长成这个样子?
  5. 思科路由和交换限制用户出外网的几种策略
  6. centos7.5 下LNMP搭建
  7. windows找不到文件gpedit.msc_电脑文件搜索神器,没有找不到的东西
  8. SpringCloud Sentinel 结合OpenFeign的使用介绍
  9. Xformode的坑
  10. Cesium入门-2-增加地形
  11. Java 在Word中创建表格
  12. openGauss开机自启动
  13. android ssl双向验证 X509证书信任管理器类的实现及应用
  14. 专家教你10个秘诀 70%癌症都能预防
  15. 出击BI SAP推全新业务分析应用行业软件
  16. 泰拉瑞亚手机版html,泰拉瑞亚提基套装怎么得 提基套装属性详解
  17. Maltab GUI课程设计——网络爬虫程序(基金连涨连跌提醒)
  18. 格式化数据方法 sanitize
  19. Zookeeper分布式锁遇到惊群效应如何解决
  20. GitLab: API is not accessible的错误解决

热门文章

  1. FactorVAE:基于变分自编码器的动态因子模型
  2. 微信小程序中,使用正则表达式,快速验证是否是数字(附正则表)
  3. react-scripts的工作原理
  4. 公众号学生成绩查询系统
  5. 装系统遇到的一些问题reboot and select proper boot device
  6. 伪全息老婆制作1(Shader入门1)
  7. Arduino CNC电机扩展板详解(A4988驱动42步进电机)
  8. Life -- MY REAL LIFE
  9. 【Java学习-J.160331.0.4】笔记3-Linux基础
  10. CentOS7下配置域名解析服务器