`MQ简介`
RabbitMQ 是一个由 Erlang 语言开发的 AMQP(即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计)的开源实现。支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
`消息模型`
所有 MQ 产品从模型抽象上来说都是一样的过程:消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。
`基本概念`
1、queue
Queue(队列)是RabbitMQ的内部对象,用于存储消息。RabbitMQ中的消息都只能存储在Queue中,生产者生产消息并最终投递到Queue中,消费者可以从Queue中获取消息并消费。多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
2、exchange
交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。实际上是生产者将消息发送到Exchange,由Exchange将消息路由到一个或多个Queue中(或者丢弃)。
3、routing key
生产者在将消息发送给Exchange的时候,一般会指定一个routing key,来指定这个消息的路由规则,而这个routing key需要与Exchange Type及binding key联合使用才能最终生效。
在Exchange Type与binding key固定的情况下(在正常使用时一般这些内容都是固定配置好的),我们的生产者就可以在发送消息给Exchange时,通过指定routing key来决定消息流向哪里。
RabbitMQ为routing key设定的长度限制为255 bytes。
4、Binding
RabbitMQ中通过Binding将Exchange与Queue关联起来,这样RabbitMQ就知道如何正确地将消息路由到指定的Queue了。
5、Binding key
在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key;消费者将消息发送给Exchange时,一般会指定一个routing key;当binding key与routing key相匹配时,消息将会被路由到对应的Queue中。
6、direct
direct类型的Exchange路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中。
7、topic
direct类型的Exchange路由规则是完全匹配binding key与routing key,但这种严格的匹配方式在很多情况下不能满足实际业务需求。topic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中。
以下是基于docker的rabbitmq安装,源码编译安装可参考:Linux下rabbitmq编译安装,rpm方式安装可参考:Linux下rabbitmq的rpm安装。
1、准备镜像,启动容器
2、进入容器
docker exec -it rabbitmq_mq_1 bash
3、安装rabbitmq
apt update
apt upgrade
apt install rabbitmq-server -y
4、启动rabbitmq服务
/etc/init.d/rabbitmq-server start
5、启用 web端可视化操作界面,我们还需要配置Management Plugin插件
rabbitmq-plugins enable rabbitmq_management
#重启服务
/etc/init.d/rabbitmq-server restart
6、查看用户
rabbitmqctl list_users
7、添加管理用户
rabbitmqctl add_user test D@E7JTij # 增加普通用户
rabbitmqctl set_user_tags test administrator # 给普通用户分配管理员角色
8、登录web管理界面
http://IP:15672