原文地址 https://www.heayan.com/articles/2018/03/10/1520707858300.html
RabbitMQ 介绍
RabbitMQ 是一个在 AMQP 协议标准基础上完成的,可复用的企业消息系统。他遵循 Mozila Public License 开源协议。采用 Erlang 实现的工业级的消息队列(MQ)服务器。
RabbitMQ 官方网站:http://www.rabbitmq.com
AMQP(高级消息队列协议)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是 API(例如 JMS),AMQP 客户端能够无视消息的来源任意发送和接收信息。AMQP 的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件(MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过简化发送的 AMQ 实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一部分,形成了在线路层协议顶端的一个层级:AMQP 模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。
RabbitMQ 整体架构
RabbitMQ 架构-运行原理
RabbitMQ 重要术语
1.Server(borker):接受客户端连接,实现 AMQP 消息队列和路由功能的进程。
2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个 Virtual Host 里面可以有若干个 Exchange 和 Queue,但是权限控制的最小粒度是 Virtual Host。
3.Exchange:接受生产者发送的消息,并根据 Binding 规则将消息路由给服务器中的队列。ExchangeType 决定了 Exchange 路由消息的行为。例如,在 RabbitMQ 中,ExchangeType 有 Direct、Fanout 和 Topic 三种,不同的 Exchange 路由的行为是不一样的。
4.Message Queue:消息队列,用于存储还未被消费者消费的消息。
5.Message:由 Header 和 Body 组成,Header 是由生产者添加的各种属性的集合,包括 Message 是否被持久化、由哪个 Message Queue 接受、优先级是多少等。而 Body 是真正需要传输的 APP 数据。
6.BindingKey:所谓绑定就是将一个特定的 Exchange 和一个特定的 Queue 绑定起来,绑定关键字成为 BindingKey。
Exchange 分类
Direct Exchange——直接式交换器模型
Direct Exchange 直接交互式处理路由键。需要将一个队列(Queues)绑定到交换机(Exchange)上,要求该消息与一个特定的路由键完全匹配,这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键为“dog”,则只有标记为“dog”的消息才被转发,不会转发 dog.puppy,也不会转发 dog.guard,只会转发 dog。
Fanout Exchange——广播式交换器模型
Fanout Exchange 广播式路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息,都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout 交换机转发消息时最快的。
Topic Exchange——主题式交换器模型
Topic Exchange主题式交换器。通过消息的路由关键字和绑定关键字的匹配模式,将消息路由到被绑定的队列中。这种路由器类型可以被用来支持经典的发布/订阅消息传输模型——使用主题名字空间作为消息寻址模式,将消息传递给那些部分或者全部匹配主题模式的多个消费者。主题交换器类型的工作方式如下:绑定关键字用零个或多个标记构成,每个标记之间用“.”字符分割。绑定关键字必须用这种形式明确说明,并支持通配符:“*”匹配一个词组,“#”匹配零个或多个词组。因此绑定关键字“*.stock.#”匹配路由关键字“usd.stock”和“eur.stock.db”,但是不匹配“stock.nasdaq”。RabbitMQ 常用配置介绍
一般情况下,RabbitMQ 的默认配置就足够了。如果希望特殊设置的话,有两个途径。
一个是环境变量的配置文件 rabbitmq-env.conf;
一个是配置信息的配置文件 rabbitmq.config;
注意,这两个文件默认是没有的,如果需要必须自己创建。
1、rabbitmq-env.conf
这个文件位置是确定和不能改变的,位于/etc/rabbitmq 目录下(这个目录需要自己创建)。
RABBITMQ_NODE_IP_ADDRESS:指定 ip 地址
RABBITMQ_NODE_PORT:指定端口号,默认 5672
RABBITMQ_CONFFIG_FILE:配置文件的路径,注意配置文件后缀必须是.config
RABBITMQ_LOG_BASE:日志文件路径
2、rabbitmq.config
这个是一个标准的 erlang 配置文件。它必须符合 derlang 配置文件的标准。Erlang tuple,结构为{Key,Value},Key 为 atom 类型,Value 为一个 term,其中几个关键参数为:
(1)tcp_listerners 设置 rabbitmq 的监听端口,默认为[5672]。
(2)disk_free_limit 磁盘低水平线,若磁盘容量低于指定值则停止接受数据。
(3)vm_memory_high_watermark,设置内存低水位线,若低于该水位线,则开启流控机制,默认是 0.4,即内存总量的 40%。
rabbitmq.config 配置示例
[
{rabbit,[
{tcp_listeners,[{"127.0.0.1",5672}]},
{ssl_listeners,[{"127.0.0.1",5671}]},
{ssl_options,[{cacertfile,"/usr/local/etc/rabbitmq/ssl/testca/cacert.pem"},
{certfile,"/user/local/etc/rabbitmq/ssl/server/cert.pem"},
{keyfile,"/use/local/etc/rabbitmq/ssl/server//key.pem"},
{verify,verify_none},
{fail_if_no_peer_cert,false}]}
]}
].
RabbitMQ 命令
- /etc/init.d/rabbitmq-server start|stop|restart|reload
- rabbitmqctl add_vhost vhostname 创建 Vhost
- rabbitmqctl delete_vhost vhostname 删除 Vhost
- rabbitmqctl list_vhost 遍历所有虚拟主机信息
- rabbitmqctl add_user username password 添加用户名、密码
- rabbitmqctl change_password username password 修改用户密码
- rabbitmqctl set_permissions -p v_host user ".""."".*"绑定权限,并且具备读写的权限
- rabbitmqctl list_queues 显示所有队列
版权所有,转载必须标识原文地址
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于