编辑推荐: |
本文主要介绍RabbtMQ是什么,RabbitMQ安装及启动、Rabbi
tMQ常用配置介绍、RabbitMQ命令介绍及web界面操作等相关内容。
本文来自于csdn,由火龙果软件Alice编辑、推荐。 |
|
一、RabbtMQ简介
RabbitMQ的官方站
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。他遵循Mozila Public
License开源协议。采用Erlang实现的工业级的消息队列(MQ)服务器。 1.1 AMQP AMQP(高级消息队列协议)是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API
(例如JMS),AMQP客户端能够无视消息的来源任意发送和接受信息。AMQP的原始用途只是为金融界提供个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件(MOM)
系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一部分,
形成了在线路层协议顶端的一个层级: AMQP模型。 这个模型统了消息模式, 诸如之前提到的发布门订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。
1.2 RabbitMQ的两大核心组件是Exchange和Queue。如图所示:
1. Server (broker):接受客户端(生产者和消费者)连接,实现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(routing-key)
和一个特定的Queue(Binding-Key)绑定起来, 绑定关键字成为BindingKey。 1.3 Exchange分类一-广播式交换器类型 1.3.1 Fanout Exchange -广播式路由键。 你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout
交换机转发消息是最快的。
Queue向后端的分发方式: 1.平均分配的方式,比如Queue1有10条msg,Consumer1和Consumer2各获得5条,Consumer1做的快,已经做完了,而Consumer2比较慢,只做了2条。这样Consumer1和Consumer2之间就没有得到很好的利用。 2.解决了1的问题。Consumer1和Consumer2每人先发一条,谁做完了就向Queue1返回ACK,Queue1在队列中删除相应的msg。然后会接着Queue1分发下一条msg。以此类推。 1.3.2 Direct Exchange -直接交互式处理路由键。
需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键“cat”
,则只有被标记为“cat"的消息才被转发,不会转发cat.puppy,也不会转发cat.
guard,只会转发cat。
1.3.2 Topic Exchange -主题式交换器。
通过消息的路由关键字和绑定关键字的模式匹配,将消息路由到被绑定的队列中。这种路由器类型可以被用来支持经典的发布/订阅消息传输模型于使用主题名字空间作为消息寻址模式,将消息传递给那些部分或者全部匹配主题模式的多个消费者。主题交换器类型的工作方式如下:绑定关键字用零个或多个标记构成,
每一个标记之间用 “.”字符分隔。绑定关键字必须用这种形式明确说明,并支持通配符:“*” 匹配一个词组,“#”
零个或多个词组。因此绑定关键字“*.cat.#"匹配路由关键字“usd.cat"和"eur.cat.db”,但是不匹配"cat.mysql
二、RabbitMQ安装及启动 rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum install -y rabbitmq-server.noarch
/sbin/rabbitmq-plugins list
/sbin/rabbitmq-plugins enable rabbitmq_management
systemctl start rabbitmq-server.service 等价 /sbin/rabbitmq-server
start | stop | restart | reload
三、Rabbi tMQ常用配置介绍 一般情况下, RabbitMQ的默认配置就足够了。如果希望特殊设置的话,有两个途径:一个是环境变量的配置文件rabbitmq-env.
conf ;一个是配置信息的配置文件rabbitmq. config。 注意,这两个文件默认是没有的,如果需要必须自己创建。 1. rabbitmq-env.conf这个文件的位置是确定和不能改变的, 位于: /etc/rabbitmq目录下
(这个目录需要自己创建)。 RABBITMQ_NODE_IP_ADDRESS:指定ip地址 RABBITMQ_NODE_PORT:指定端口号默认5672 RABBITMQ_CONFIG_FILE:配置文件的路径,注意配置文件后缀必须是config RABBITMQ_LOG_BASE:日志文件路径 2、rabbitm.config这是一个标准的erlang配置文件。它必须符合erlang配置文件的标准。Erlangtuple,结构为{Key,
Value} ,Key为atom类型,Value为一个term, 其中几个关键参数为: 1、tcp_listerners设置rabbitmq的监听端口,默认为[5672]. 2、disk_free_limit磁盘低水位线,若磁盘容量低于指定值则停止接收数据。 3、vm_memory_high_watermark, 设置内存低水位线, 若低于该水位线,则开启流控机制,默认值是0.4.即内存总量的40%。 四、RabbitMQ命令介绍及web界面操作
1、rabbitmqctl add_user username password
添加用户及密码;
[root@mage-monitor-01~/] #/sbin/rabbitmqctl
add_user xiaoming
Creating user "xiaoming" ...
...done. |
也可以在web页面操作:登录http://10.0.0.201:15672 (你自己的IP),用户guest(超级用户),密码:guest
2、rabbitmgctl add_vhost vhostname
创建Vhost; rabbitmqctl delete_vhost vhostname 删除Vhost;
[root@mage-monitor-01~/]#/sbin/rabbitmqctl
add_vhost test_linux
Creating vhost "test_linux" ...
...done. |
3、rabbitmqctl set_permissions -p V_host
user “.*” “.*” “.*” 绑定权限,并且具备读写的权限;
[root@mage-monitor-01~/]
#/sbin/rabbitmqctl set_permissions -p test_linux
xiaoming ".*" ".*" ".*"
Setting permissions for user "xiaoming"
in vhost "test_linux" ...
...done. |
4、rabbitmqctl change_password username
newpassword 修改用户密码; /sbin/rabbitmqctl delete_user
<username> 删除用户;
[root@mage-monitor-01~/]
#/sbin/rabbitmqctl delete_user xiaoming
Deleting user "xiaoming" ...
...done. |
5、rabbitmqctl list_queues 显示所有队列。
6、rabbitmqctl list_vhosts 遍历所有虚拟主机信息;
|