RabbitMQ使用AMQP协议
ActiveMQ使用JMS API

  1. AMQP为消息定义了线路层(wire level protocol)的协议,而JMS所定义的是API规范。JMS的API规范能够确保所有的实现都能通过通用的API来使用,但是并不能保证某个JMS实现所发送的消息能够被另外不同的JMS实现所使用。而AMQP的线路层协议规范了消息的格式,消息在生产者和消费者间传送的时候会遵循这个格式。这样AMQP在互相协作方面就要优于JMS——它不仅能跨不同的AMQP实现,还能跨语言和平台。

即JMS还是要求生产者和消费者都是java程序,实现了JMS的API协议。而AMQP则没有此限制。

  1. AMQP另外一个明显的优势在于它具有更加灵活和透明的消息模型。使用JMS的话,只有两种消息模型可供选择:点对点和发布-订阅。这两种模型在AMQP当然都是可以实现的,但AMQP还能够让我们以其他的多种方式来发送消息,这是通过将消息的生产者与存放消息的队列解耦实现的。而JMS并没有实现生产者和队列/主题的解耦。

1. 常用交换器

RabbitMQ常用的交换器类型有direct、topic、fanout、headers四种。

Direct Exchange(点对点式)

该类型的交换器将所有发送到该交换器的消息被转发到RoutingKey指定的队列中,也就是说路由到BindingKey和RoutingKey完全匹配的队列中。
image.png

Topic Exchange(订阅--模糊匹配)

该类型的交换器将所有发送到Topic Exchange的消息被转发到所有RoutingKey中指定的Topic的队列上面。
Exchange将RoutingKey和某Topic进行模糊匹配,其中“*”用来匹配一个词,“#”用于匹配一个或者多个词。例如“com.#”能匹配到“com.rabbitmq.oa”和“com.rabbitmq”;而"login."只能匹配到“com.rabbitmq”。
image.png

Fanout Exchange(订阅--广播模式)

该类型不处理路由键,会把所有发送到交换器的消息路由到所有绑定的队列中。优点是转发消息最快,性能最好。
image.png

Headers Exchange(订阅--匹配请求头,不常用)

该类型的交换器不依赖路由规则来路由消息,而是根据消息内容中的headers属性进行匹配。headers类型交换器性能差,在实际中并不常用。

2. RabbitMQ的安装

2.1 Docker环境安装RabbitMQ

进入docker官网
找到所需版本:
image.png

2.2 安装命令:(management带web管理界面)

docker pull rabbitmq:3-management

2.3 后台运行命令:

docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq imageId(镜像id)

2.4 浏览器访问:

http://服务器ip:15672
image.png
默认后台登录账号密码:guest guest
image.png

Q.E.D.


如人饮水、冷暖自知