Advanced Message queuing Protocol,是用于在应用程序或之间传递业务消息的开放标准。该协
议与语言和平台无关,更符合微服务中独立性的要求。
监听器容器,监听消息。
便捷的消息接收,便捷的消息发送。以及自动化的队列声明
-
BasicQueue简单队列模型
简化消息发送和接收的api
(一)发消息
具备Spring的运行环境了
测试类的注解 @RunWith(SpringRunner.class) @SpringBootTestautowired注入 rabbittample工具
类为了让Spring知道要注册成一个Bean
(二)接收消息
@Component
@RabbitListener(声明队列名称)
写完后运行整个项目
springAMQP如何接收消息?
- 引入amqp的starter依赖
- 配置RabbitMQ地址
- 定义类,添加@Component注解
- 类中声明方法,添加@RabbitListener注解,方法参数就时消息
注意:消息一旦消费就会从队列删除,RabbitMQ没有消息回溯功能
-
Work Queue 工作队列模型
提高消息处理速度,避免队列消息堆积。
fori(for循环)
阅后即焚,
模拟WorkQueue,实现一个队列绑定多个消费者
基本思路如下:
1.在publisher服务中定义测试方法,每秒产生50条消息,发送到simple.queue2.在consumer服务中定义两个消息监听者,都监听simple.queue队列
3.消费者1每秒处理50条消息,消费者2每秒处理10条消息
休眠:Thread.sleep(20)
当前时间:LocalTime.now()
处理是奇数偶数,消息预取,早就取出来了。
消息预取机制
work模型的使用
- 多个消费者绑定到一个队列,同一条消息只会被一个消费者处理。
- 通过设置prefetch来控制消费者预取的消息数量 。
- 提高速度避免堆积。
-
发布、订阅模型-Fanout
@Configuration,配置类,可以声明多个bean
交换机的作用是什么?
- 接收publisher发送的消息
- 将消息按照规则路由到与之绑定的队列
- 不能缓存消息,路由失败,消息丢失
- FanoutExchange的会将消息路由到每个绑定的队列
声明队列(que)、交换机(exchange)、绑定关系(binding)的Bean是什么?
-
发布、订阅模型-Direct
-
发布、订阅模型-Topic
-
消息转换器