如何整合RabbitMQ

1、添加spring-boot-starter-amqp

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-amqp</artifactId>
  4. </dependency>

2、添加配置

  1. spring.rabbitmq.host=localhost
  2. spring.rabbitmq.port=5672
  3. spring.rabbitmq.username=guest
  4. spring.rabbitmq.password=guest
  5. spring.rabbitmq.publisher-confirms=true
  6. spring.rabbitmq.dynamic=true
  7. spring.rabbitmq.cache.connection.mode=channel

3、注入队列

  1. @Configuration
  2. public class RabbitConfig {
  3. @Bean
  4. public Queue Queue() {
  5. return new Queue("hello");
  6. }
  7. }

4、创建操作数据的Repository对象

  1. interface CityRepository extends Repository<City, Long> {
  2. Page<City> findAll(Pageable pageable);
  3. Page<City> findByNameContainingAndCountryContainingAllIgnoringCase(String name,
  4. String country, Pageable pageable);
  5. City findByNameAndCountryAllIgnoringCase(String name, String country);
  6. }

5、创建消费者

  1. @Component
  2. public class RabbitConsumer {
  3. @RabbitHandler
  4. @RabbitListener(queues = "hello")
  5. public void process(@Payload String foo) {
  6. System.out.println(new Date() + ": " + foo);
  7. }
  8. }

6、启动主类

  1. @SpringBootApplication
  2. @EnableScheduling
  3. public class AmqpApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(AmqpApplication.class, args);
  6. }
  7. }

控制台输出:

  1. Sun Sep 30 16:30:35 CST 2018: hello

到此,一个简单的SpringBoot2.0集成RabbitMQ就完成了。

熟悉RabbitMQ的小伙伴们应该知道,RabbitMQ在一般的队列基础上,增加了ExChange的概念。ExChange有四种类型:Direct, Topic, Headers and Fanout。其中Headers实际很少使用,Direct较为简单。接下来将详细介绍如何使用topic和Fanout。

Topic Exchange

1、配置Topic规则

  1. @Configuration
  2. public class TopicRabbitConfig {
  3. @Bean
  4. public Queue queueMessage1() {
  5. return new Queue(MQConst.TOPIC_QUEUENAME1);
  6. }
  7. @Bean
  8. public Queue queueMessage2() {
  9. return new Queue(MQConst.TOPIC_QUEUENAME2);
  10. }
  11. @Bean
  12. TopicExchange exchange() {
  13. return new TopicExchange(MQConst.TOPIC_EXCHANGE);
  14. }
  15. @Bean
  16. Binding bindingExchangeMessage(Queue queueMessage1, TopicExchange exchange) {
  17. // 将队列1绑定到名为topicKey.A的routingKey
  18. return BindingBuilder.bind(queueMessage1).to(exchange).with(MQConst.TOPIC_KEY1);
  19. }
  20. @Bean
  21. Binding bindingExchangeMessages(Queue queueMessage2, TopicExchange exchange) {
  22. // 将队列2绑定到所有topicKey.开头的routingKey
  23. return BindingBuilder.bind(queueMessage2).to(exchange).with(MQConst.TOPIC_KEYS);
  24. }
  25. }

2、配置消费者

  1. @Component
  2. public class TopicConsumer {
  3. @RabbitListener(queues = MQConst.TOPIC_QUEUENAME1)
  4. @RabbitHandler
  5. public void process1(String message) {
  6. System.out.println("queue:topic.message1,message:" + message);
  7. }
  8. @RabbitListener(queues = MQConst.TOPIC_QUEUENAME2)
  9. @RabbitHandler
  10. public void process2(String message) {
  11. System.out.println("queue:topic.message2,message:" + message);
  12. }
  13. }

3、生产消息

在Producer类中添加:

  1. // Topic
  2. rabbitTemplate.convertAndSend(MQConst.TOPIC_EXCHANGE, MQConst.TOPIC_KEYS, "from keys");
  3. rabbitTemplate.convertAndSend(MQConst.TOPIC_EXCHANGE, MQConst.TOPIC_KEY1, "from key1");

再次启动主类,控制台输出:

  1. queue:topic.message2,message:from keys
  2. queue:topic.message1,message:from key1
  3. queue:topic.message2,message:from key1

Fanout Exchange

1、配置Fanout规则

  1. @Configuration
  2. public class FanoutRabbitConfig {
  3. @Bean
  4. public Queue MessageA() {
  5. return new Queue(MQConst.FANOUT_QUEUENAME1);
  6. }
  7. @Bean
  8. public Queue MessageB() {
  9. return new Queue(MQConst.FANOUT_QUEUENAME2);
  10. }
  11. @Bean
  12. FanoutExchange fanoutExchange() {
  13. return new FanoutExchange(MQConst.FANOUT_EXCHANGE);
  14. }
  15. @Bean
  16. Binding bindingExchangeA(Queue MessageA, FanoutExchange fanoutExchange) {
  17. return BindingBuilder.bind(MessageA).to(fanoutExchange);
  18. }
  19. @Bean
  20. Binding bindingExchangeB(Queue MessageB, FanoutExchange fanoutExchange) {
  21. return BindingBuilder.bind(MessageB).to(fanoutExchange);
  22. }
  23. }

2.配置消费者

  1. @Component
  2. public class FanoutConsumer {
  3. @RabbitListener(queues = MQConst.FANOUT_QUEUENAME1)
  4. @RabbitHandler
  5. public void process1(String message) {
  6. System.out.println("queue:fanout.message1,message:" + message);
  7. }
  8. @RabbitListener(queues = MQConst.FANOUT_QUEUENAME2)
  9. @RabbitHandler
  10. public void process2(String message) {
  11. System.out.println("queue:fanout.message2,message:" + message);
  12. }
  13. }

3、生产消息

在Producer类中添加:

  1. // FanOut
  2. rabbitTemplate.convertAndSend(MQConst.FANOUT_EXCHANGE, "", "fanout");

再次启动主类,控制台输出:

  1. queue:fanout.message2,message:fanout
  2. queue:fanout.message1,message:fanout

源码地址:GitHub


本篇到此结束,如果读完觉得有收获的话,欢迎点赞、关注、加公众号【贰级天災】,查阅更多精彩历史!!!

SpringBoot2.0应用(三):SpringBoot2.0整合RabbitMQ的更多相关文章

  1. SpringBoot2.0源码分析(三):整合RabbitMQ分析

    SpringBoot具体整合rabbitMQ可参考:SpringBoot2.0应用(三):SpringBoot2.0整合RabbitMQ RabbitMQ自动注入 当项目中存在org.springfr ...

  2. rabbitMQ教程(三) spring整合rabbitMQ代码实例

    一.开启rabbitMQ服务,导入MQ jar包和gson jar包(MQ默认的是jackson,但是效率不如Gson,所以我们用gson) 二.发送端配置,在spring配置文件中配置 <?x ...

  3. SpringBoot2.0之整合RabbitMQ

    案例: Springboot 对RabbitMQ的支持 公共的pom: <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  4. SpringBoot2.0+Mybatis-Plus3.0+Druid1.1.10 一站式整合

    SpringBoot2.0+Mybatis-Plus3.0+Druid1.1.10 一站式整合 一.先快速创建一个springboot项目,其中pom.xml加入mybatis-plus 和druid ...

  5. springboot2.04与activiti 6.0集成

    本文就不对activiti做解释,下面直接看项目集成 以下顺序方面根据我的理解来,可以先从第二章看,再看第一张与第三章 增加activiti表的API,备注用. 目录 一.springboot2.X集 ...

  6. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.jbpm4.4 测试环境搭建 2.Jbpm4.4+hibernat ...

  7. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)

    前两章我为大家详细介绍了如何搭建Maven环境.Spring MVC的流程结构.Spring MVC与Struts2的区别以及示例中的一些配置文件的分析.在这一章,我就对示例的层次结构进行说明,以及M ...

  8. QT5.4.0安装以及与VS2010整合安装---64bit操作系统解决方案

    QT5.4.0安装以及与VS2010整合安装---64bit操作系统解决方案 注意,目前QT官网不能下载,必须提供注册,然后才可以下载. 网上不同版本安装的细节有差异,特将我的安装相关操作贴出来,希望 ...

  9. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子

    转自:http://www.blogjava.net/wangxinsh55/archive/2011/07/24/354925.html   Jbpm4.4+hibernate3.5.4+sprin ...

随机推荐

  1. 移动端 去除onclick点击事件出现的背景色框

    这个特效是实现在移动端点击某个地方的时候,比如说按钮或者超链接的时候,系统会默认加上一些灰色的背景和一些高亮的效果.但是有的时候我们并不想要这些效果.并且希望点击的时候实现神不知鬼不觉的感觉,,这个时 ...

  2. 1123. Is It a Complete AVL Tree (30)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  3. ELK的文档搭建

    一.安装elasticsearch 官网:https://www.elastic.co/guide/index.html https://www.elastic.co/guide/en/elastic ...

  4. linux的常用指令和配置文件

    一. 常用的指令 mkdir -p 创建文件夹 parents递归创建 ls -alh 查看当前目录内容 cd   切换工作目录 pwd 打印当前工作目录 touch 文件名 创建文件 echo 字符 ...

  5. Notes : <Hands-on ML with Sklearn & TF> Chapter 4

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  6. 学习python一个月盘点

    1,看了30多个视频,是一些基本操作的.粗略的了解了语法,函数,循环,正则表达,将视频内容全部敲入文本: 2,看了100页的书,习题不太会,进展很慢.第五章10以后的题都没做: 3,看C++的书,有点 ...

  7. Matlib

    >>> name1=input('请输入第一个名字;') 请输入第一个名字;陈汉彬 >>> name2=input('请输入第二个名字;') 请输入第二个名字;钟宇 ...

  8. appium安装问题集锦

    问题一: MacBook-Air:Cellar$ npm -v dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dyl ...

  9. gitlab 之 升级、迁移

    -----故事背景- 公司服务器用vm装的虚拟机,由于公司服务器经常无故重启,且找不到原因,所以公司准备将vm迁移至Hyper-V,Hyper-V可以自启动虚拟机且免费. -----升级.迁移- 首先 ...

  10. java0618

    1. java的基本数据类型,各占多少字节? byte 8位 short 16位 int 32位 long 64位 float 32位 double 64位 boolean 1位 char 16位 2 ...