RabbitMQ相关概念及部署
大约 4 分钟mqmq
简介
RabbitMQ 是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。
特点
- 异步通讯,支持多个消息传递协议、消息队列、传递确认、灵活的队列路由、多个交换器类型。
- 多语言支持。支持多种部署方式,多语言。
- 集群部署
- 云支持。可插拔的身份验证、授权,支持 TLS 和 LDAP。 轻量级且易于部署在公共和私有云中。
- 插件繁多。各种各样的工具和插件,支持持续集成、操作度量以及与其他企业系统的集成。 扩展 RabbitMQ 功能的灵活插件方法。
- 完善的管理和监控机制。用于管理和监视 RabbitMQ 的 HTTP-API、命令行工具和 界面。
主要组件
- 消息,由消息头和消息体组成。消息体是不透明的,消息头由一些列可选属性组成,这些属性包括:routing-key(路由键)、priority(优先级)、delivery-mode(消息是否可持久性存储)。
- 消息的生产者,也是一个向交换器发布消息的客户端应用程序。
- 消息的消费者,表示一个从消息队列中取得消息的客户端程序。
- 交换器,用来接收生产者发送的消息,并将这些消息路由给服务器中的队列。
- 路由,RabbitMQ 决定消息该投递到哪个队列的规则。队列通过路由键绑定到交换器。消息发送到 MQ 服务器时,消息拥有一个路由键,即便是空的,RabbitMQ 也会将其和绑定使用的路由键进行匹配。如果相匹配,消息会投递到该队列,如果不匹配,消息将会进入黑洞。
- 消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可以投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列取走消息。
- Channel 信道
- 一条支持多路复用的通道,独立的双向数据流通道,可以发布、订阅、接收消息。
- 信道是建立在真实的TCP连接内的虚拟连接,复用TCP连接的通道
- Connection连接
- 是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑,一个连接上可以有多个channel进行通信
交换机类型
Direct
处理路由键,需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键为 “green”,则只有路由键为“green”的消息才被转发,不会转发路由键为"red",只会转发路由键为"green"。
Topic
将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”只能匹配一个词。
Fanout
Fanout 不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到该类型交换机的消息都会被广播到与该交换机绑定的所有队列上。
Headers
不处理路由键,而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的
安装部署
1、官网介绍了很多部署方式,在这里以 docker 为例。
# 安装docker
yum install docker
#拉取镜像
docker pull rabbitmq:management
#启动
docker run -d --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
- 15672-> 控制台端口号
- 5672-> 应用程序端口号
如果需要查看日志,可以使用命令。
docker logs -f [containerId]
登录控制台:http://localhost:15672/
如果不指定账户密码,默认账号:guest ,密码:guest