前言:

因为项目需要用到RabbitMQ,前几天就看了看RabbitMQ的知识,记录下SpringBoot整合RabbitMQ的过程。

给出两个网址:

RabbitMQ官方教程:http://www.rabbitmq.com/getstarted.html

SpringBoot整个RabbitMQ教程:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#boot-features-amqp

正文:

1:最简单的HelloWorld

首先加上SpringBoot的依赖

 <!-- rabbitmq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

其实我们要申明一个队列,这里队列存放生产者生产的消息,然后消费者来这里面取出来

 @Configuration
public class RabbitBeanConf { public static final String QUEUE = "queue"; @Bean
public Queue queue() {
return new Queue(QUEUE, true);
}
}

生产者:

 @Service
public class RabbitSender { @Autowired
AmqpTemplate amqpTemplate; public void send(String msg) {
amqpTemplate.convertAndSend(RabbitBeanConf.QUEUE, msg);
System.out.println("生产者生产了一个消息: " + msg + " " + new Date().getTime());
}
}

消费者:

 @Service
public class RabbitReceiver { @RabbitListener(queues = RabbitBeanConf.QUEUE)
public void receive(String msg) { System.out.println("消费者收到了一个消息: " + msg + " " + new Date().getTime());
}
}

2:广播模式(Fanout模式)

这个模式不同于上面的模式,这个模式只要一个生产者生产出一个消息,那么所有消费者全部可以接收到。

最简单一个例子就是你微信群发消息的时候,你发了一条消息,但你的好友全部都能收到这条消息

RabbitMQ配置:

 @Configuration
public class FanoutRabbitMQConfig { //默认持久化durable为true
//根据方法名来进行绑定的 firstFanoutQueue()
@Bean
public Queue firstFanoutQueue() {
return new Queue("firstFanoutQueue");
} @Bean
public Queue secondFanoutQueue() {
return new Queue("secondFanoutQueue");
} //默认持久化durbale为true
//exchange交换机
@Bean
public FanoutExchange fanoutExchange() {
return new FanoutExchange("fanoutExchange");
} /**
* 以下两种方法都可以成功
*
* @return
* 2018年6月11日
*/
@Bean
public Binding bindingFirst() {
return BindingBuilder.bind(firstFanoutQueue()).to(fanoutExchange());
} @Bean
public Binding bindingSecond(FanoutExchange fanoutExchange, Queue secondFanoutQueue) {
return BindingBuilder.bind(secondFanoutQueue).to(fanoutExchange);
}
}

这里我解释一下,官方引入了一个叫做 “exchange”交换机的东西。

我是这样理解的:这个交换机主要是为了解耦生产了和消费者直接的强联系。生产者不直接往队列里面送东西了,而且往exchange里面送东西,然后exchange绑定想要送消息进去的队列,然后消费者监听即可。主要解耦。

生产者:

 @Service
public class FanoutSender { @Autowired
AmqpTemplate amqpTemplate; public void send(String msg) { amqpTemplate.convertAndSend("fanoutExchange", "", msg);
System.out.println("生产者生产了一个消息: " + msg + " " + new Date().getTime());
}
}

消费者:

 @Service
public class FanoutRecevi { @RabbitListener(queues = {"firstFanoutQueue", "secondFanoutQueue"})
public void receive(String msg) { System.out.println("消费者收到了一个消息: " + msg + " " + new Date().getTime());
}
}

3:Topic模式

感觉和直接模式(direct模式)有点相像。只不过这里用了类似正则的东西,一个exchange匹配符合规则的队列。

topic 和 direct 类似, 只是匹配上支持了"模式", 在"点分"的 routing_key 形式中, 可以使用两个通配符:

  • *表示一个词.

  • #表示零个或多个词.

4:Header模式

headers 也是根据规则匹配, 相较于 direct 和 topic 固定地使用 routing_key , headers 则是一个自定义匹配规则的类型.
在队列与交换器绑定时, 会设定一组键值对规则, 消息中也包括一组键值对( headers 属性), 当这些键值对有一对, 或全部匹配时, 消息被投送到对应队列.

最新文章

  1. CTO对话:云端融合下的移动技术创新
  2. bean之间的关系:继承、依赖
  3. How to use PEM of PPAS
  4. STL --- UVA 123 Searching Quickly
  5. Export-XLSX PowerShell generate real Excel XLSX files without Excel and COM
  6. 证书 pki
  7. Table of Contents - JMS
  8. 虚拟攻防系统 HoneyPot
  9. Hive QL 介绍
  10. AI 人工智能 探索 (五)
  11. rsync (windows 服务端,linux客户端)将windows上的数据同步到linux服务器,反之也可
  12. [附录]Discuz X2.5程序模块source功能处理目录注释
  13. scrapy_items
  14. Yii2 日志处理
  15. sessionStorage 、localStorage 和 cookie
  16. JSON Patch
  17. Altium Designer快速调整丝印
  18. LY.JAVA面向对象编程.包的概述、导包
  19. avalon2学习教程08插入移除操作
  20. JAVA反射机制_获取字节码文件对象

热门文章

  1. SRM480
  2. php支持连接sqlserver数据库
  3. Android-Kotlin-接口与多态的表现
  4. JVM活学活用——GC算法 垃圾收集器
  5. eclipse代码提示javadoc背景为黑色框的解决办法
  6. 201621123018《Java程序设计》第7周学习报告
  7. Android------------------系统服务调用的学习
  8. C#导出HTML到PDF组件 Pechkin
  9. ASP.NET Core WebApi 项目部署到 IIS 服务器的总结
  10. iOS-QQ临时对话、QQ群申请跳转