介绍
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。
遵循Mozilla Public License开源协议。
采用Erlang实现的工业级的消息队列(MQ)服务器
AMQP(高级消息队列协议)是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(列如JMS),
AMQP客户端能够无视消息的来源任意发送和接受信息。AMQP的原始用途只是为了金融界提供一个可以彼此协作的消息协议,
而现在的目标则是为了通用消息队列框架提供通用构建工具。因此,面向消息的中间件(MOM)系统,列如发布/订阅队列,没有
作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建列如这些实体的能力。这些实体也是规范的一部分,
形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。
两大核心组件是 Exchange和Queue
(Server broker)接受客户连接,实现AMQP消息队列和路由功能的进程
(Virtual Host) 其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小颗粒是Virtual Host
(Exchange)接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。ExchangeType决定了Exchange路由消息的行为,例如在RabbitMQ中,ExchangeType有direct,Fanout和Topic三种,不同类型的Exchange路由的行为不一样的
(Message Queue) 消息队列,用于存储还未被消费者消费的消息
(Message) 有Header和Body组成,Header是由生产者添加的各种属性的集合,包括Message是否被持久化,由哪个MessageQueue接收,优先级是多少等。而Body是真正需要传输的APP数据
(BindingKey)所谓绑定就是将一个特定的Exchange和一个特定的Queue绑定起来,绑定的关键字就是BIndingkey
Direct Exchange --- 直接交互式处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定路由键完全匹配。
这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键“dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy 也不会转发dog.guard 只会转发dog
Topic Exchange --- 主题交换器,通过消息的路由关键字和绑定关键字的模式匹配,将消息路由到被绑定的队列中,这种路由器类型可以被用来支持经典的发布/订阅消息传输模型----使用主题名字空间作为消息寻址模式,将消息传递给那些部分或者全部匹配主题模式的多个消费者。主题交换器类型的工作方式如下“
绑定关键字用零个或多个标记构成,每一个标记之间用“ · ”字符分割,绑定关键字必须用这种形式明确说明,并支持通配符:“”“
* ” 匹配一个词组,“#” 零个或多个词组。 因此绑定关键字“*·stock·#” 匹配路由关键字 “usd.stock” 和 “eur.stock.db”,但是不匹配stock.pacdog”
Fanout Exchange ---广播式路由键、你需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机获得一份复制的消息、fanout交换机转发消息是最快的
RabbitMQ常用配置介绍
一般情况下,RabbitMQ默认配置就足够了。如果希望特殊设置的话,有两种途径
1 , 环境变量的配置文件:rabbitmq-env.conf;
2 , 配置信息的配置文件: 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 ,rabbitmq.config 这是一个标准的erlang配置文件。它必须符合erlang配置文件的标准。erlang tuple,结构为{key,value}
key 为atom类型,value 为term 其中几个参数最为关键
1 tcp_listerners 设置rabbimq的监听端口 默认 5672
2 disk_free_limit 磁盘低水位线,若磁盘容量低于指定值则停止接收数据
3 vm_memory_high_watermark 设置内存低水位线,若低于水位线,则开启流控机制默认为0.4 即内存总40%
[
{rabbit,[
{tcp_listeners,[{"120.0.0.1",5672}]},
{ssl_listeners,[{"120.0.0.1",5671}]},
{ssl_options,[{cacertfile,"/user/local/etc/rabbitmq/ssl/testca/cacert.pem"},
{certfile,"/user/local/etc/rabbitmq/ssl/server/cert.pem"},
{keyfile,"/user/local/etc/rabbitmq/ssl/server/key.per"},
{verify,verify_none},
{fail_if_no_peer_cert,false}]}
]}
]
Rabbit mq 命令介绍
1 /etc/init.d/rabbitmq-server start|stop | restart | reload
2 rabbitmqctl and_vhost vhostname 创建Vhost
3 rabbitmqctl delete_vhost vhostname 删除Vhost
4 rabbitmqctl list_vhosts 遍历所有虚拟机信息
5 rabbitmqctl and_user username password 添加用户及密码
6 rabbitmqctl change_password username newpassword 修改用户密码
7 rabbitmqctl set_permissions -p v_host user ".*"".*" ".*"//绑定权限具备读写权限
8 rabbitmqctl list_queues //显示所有队列
RabbitMq安装
wget http://mirrors.ustc.edu.cn/fedora/epel//6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum install rabbitmq-server -y
/user/lib/rabbitmq/bin/rabbitmq-plugins list
/user/lib/rqbbitmq/bin/rabbitmq-plugins enable rabbitm_mangement
/etc/init.d/rabbitmq-server rstart