RabbitMQ
MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用非常广泛。RabbitMQ官方地址:http://www.rabbitmq.com/
应用 场景
1.任务异步处理
降不需要同步处理的并且耗时长的操作由消息队列通知消息方进行异步处理。提高应用程序的响应时间。
2、应用程序解耦合
MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合
RabbitMQ优点
1、使得简单,功能强大。
2、基于AMQP协议。
3、社区活跃,文档完善。
4、高并发性能好,这主要得益于Erlang语言。
5、Spring Boot默认已集成RabbitMQ
RabbitMQ工作原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UYI03k2d-1571639713420)(C:\Users\Administrator\Desktop\1571624091(1)].png)
组成部分说明
- Broker:消息队列的服务进程,此进程包括两大部分:Exchange和Queue 【交换机和队列】
- Exchange:消息队列交换机,按一定的规则将消息路由转发给某个队列,对消息进行过滤
- Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消息方。
- Producer:消息生产者,即生产客户单,生产方客户端将消息发送到MQ。
- Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
消息发布接收流程
发送消息
- 生产者和Broker建立TCP连接
- 生产者和Broker建立通道
- 生产者通过通道消息发布发送到Broker,由Exchange将消息进行转发。
- Exchange将消息转发到指定的Queue
接收消息
public class Producer{
//队列名称
private static final String QUEUE ="helloworld";
public static void main(String[] args)throws IOException,TimeoutException{
Connection connection =null;
Channel channel =null;
try{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setPort("5672");
factory.setUsername("guest");