RabbitMQ官网

简介

RabbitMQ轻巧,易于在本地和云中部署。它支持多种消息协议。RabbitMQ可以部署在分布式和联合配置中,以满足大规模、高可用性的要求。
图片.png

安装使用

官方安装教程

  • 安装Erlang、RabbitMQ
  • UI管理插件

rabbitmq-plugins.bat enable rabbitmq_management
http://127.0.0.1:15672/ guest / guest

工作模式

RabbitMQ教程
RabbitMQ六种工作模式的对比与实践(写得很好)
rabbitmq-java-client

  • Work queues 工作队列

多个消费端消费同一个队列中的消息,队列采用轮询的方式将消息是平均发送给消费者;
RabbitMQ - 图2
一条消息只会被一个消费端接收;
队列采用轮询的方式将消息是平均发送给消费者的;
消费者在处理完某条消息后,才会收到下一条消息

  • Publish/Subscribe 发布/订阅

这种模式又称为发布订阅模式,相对于Work queues模式,该模式多了一个交换机,生产端先把消息发送到交换机,再由交换机把消息发送到绑定的队 列中,每个绑定的队列都能收到由生产端发送的消息。
RabbitMQ - 图3
每个消费者监听自己的队列。
生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息。
应用场景:用户通知,当用户充值成功或转账完成系统通知用户,通知方式有短信、邮件多种方法

  • Routing 路由选择

Routing 模式又称路由模式,该种模式除了要绑定交换机外,发消息的时候还要制定routing key,即路由key,队列通过通道绑定交换机的时候,需要指定自己的routing key,这样,生产端发送消息的时候也会指定routing key,通过routing key就可以把相应的消息发送到绑定相应routing key的队列中去
RabbitMQ - 图4
每个消费者监听自己的队列,并且设置routingkey;
生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列;
应用场景:用户通知,当用户充值成功或转账完成系统通知用户,通知方式有短信、邮件多种方法;

  • Header 模式

header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配队列

案例:
根据用户的通知设置去通知用户,设置接收Email的用户只接收Email,设置接收sms的用户只接收sms,设置两种通知类型都接收的则两种通知都有效。

根据假设使用场景,需要一个生产端,两个消费端,不同的是,生产端声明交换机时,交换机的类型不同,是headers类型,生产端队列绑定交换机时, 不使用routingkey,而是使用header中的 key/value(键值对)匹配队列,发送消息时也是使用header中的 key/value(键值对)匹配队列。

消费端同样是声明交换机时,交换机的类型不同,是headers类型,消费端队列绑定交换机时,不使用routingkey,而是使用header中的 key/value(键 值对)匹配队列,消费消息时也是使用header中的 key/value(键值对)匹配队列。

  • Topics 通配符

Topics 模式和Routing 路由模式最大的区别就是,Topics 模式发送消息和消费消息的时候是通过通配符去进行匹配的。
RabbitMQ - 图5
每个消费者监听自己的队列,并且设置带统配符的routingkey;
生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列
将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词
应用场景:用户通知,当用户充值成功或转账完成系统通知用户,通知方式有短信、邮件多种方法;

  • RPC 远程过程调用

RabbitMQ - 图6
RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:
1、客户端即是生产者也是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
2、服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果。
3、服务端将RPC方法 的结果发送到RPC响应队列。
4、客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。