- 安装rabbitmq,必须安装erlang,安装可以下载安装包,也可以下载rpm 文件安装,rabbitmq官网提供了erlang的安装文件,过程中可能会遇到一些问题查看
- 问题查看http://thrillerzw.iteye.com/blog/2111335
- 下载地址 http://www.rabbitmq.com/releases/erlang/
- 版本对照表,下载指定版本的 erlang
- 安装
yum install erlang-19.0.4-1.el7.centos.x86_64.rpm
- 安装过程 ,提示错误,少了那些依赖包,可参考: http://www.51itong.net/centos6-5-erlang-6590.html
- 安装 rabbitMq
- 下载地址 : http://www.rabbitmq.com/releases/rabbitmq-server/
- 安装 :
yum install rabbitmq-server-3.6.10-1.el7.noarch.rpm
tip:可以用yum安装,可能版本比较老
配置
- rabbitmq 安装后,默认的配置
- 数据库路径 :
/var/lib/rabbitmq
- 配置文件路径 :
/etc/rabbitmq
, 其中,环境配置文件/etc/rabbitmq/rabbitmq-env.conf
位置不能变,/etc/rabbitmq/rabbitmq.config
,可以通过环境变量配置CONFIG_FILE=/usr/local/etc/rabbitmq/rabbitmq
NODE_IP_ADDRESS=127.0.0.1
NODENAME=rabbit-xiaofang
- 数据库路径 :
- 日志路径 :
/var/log/rabbitmq
,可以查看插件加载,启动的服务,配置文件在哪,有没有加载配置文件等 - 安装web 管理插件
rabbitmq-plugins enable rabbitmq_managemen
> tips : 从3.4 以后的版本,guest,就只能本机访问了,外部访问不了,推荐添加新的用户和角色,来管理界面
rabbitmq-plugins disable rabbitmq_managemen
访问 http://localhost:15672可以查看web管理界面, - 配置外部访问
[
{rabbit,[
{tcp_listeners, [5672]}
]
}
]. - 启动服务 : rabbitmq-server -detached, 启动一个守护进程,后台运行
- 新建用户和授权
rabbitmqctl add_user admin admin123
rabbitmqctl set_user_tags admin administrator //给用户赋予角色
rabbitmqctl list_user //查看用户
rabbitmqctl list_vhosts
rabbitmqctl add_vhost xiaofang
rabbitmqctl set_permissions -p xiaofang admin '.*' '.*' '.*' // set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
rabbitmqctl list_user_permissions admin //查看某个用户权限
概念
概念
- product、exchange、binding、queue 、custome 之间的关系
[图片]()
[关系]()
- Exchange type : fanout、direct 、topic、headers、
- fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中 – direct类型的Exchange路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中。 – opic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不同,它约定: – outing key为一个句点号“. ”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit” binding key与routing key一样也是句点号“. ”分隔的字符串 – binding key中可以存在两种特殊字符“”与“#”,用于做模糊匹配,其中“”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)
客户端使用
- 查看队列里面的内容
- 没有用到超时机制。RabbitMQ仅仅通过Consumer的连接中断来确认该Message并没有被正确处理。也就是说,RabbitMQ给了Consumer足够长的时间来做数据处理。
- queue也可以自动删除,被标为auto-delete的queue在最后一个Consumer unsubscribe后就会被自动删除。那么如果是创建一个已经存在的queue呢?那么不会有任何的影响。需要注意的是没有任何的影响,也就是说第二次创建如果参数和第一次不一样,那么该操作虽然成功,但是queue的属性并不会被修改
- 如果queue不存在,当然Consumer不会得到任何的Message。但是如果queue不存在,那么Producer Publish的Message会被丢弃。所以,还是为了数据不丢失,Consumer和Producer都try to create the queue!反正不管怎么样,这个接口都不会出问题。
- queue也可以自动删除,被标为auto-delete的queue在最后一个Consumer unsubscribe后就会被自动删除。
- rabbitMq默认是公平分发,RabbitMQ将第n个Message分发给第n个Consumer。当然n是取余后的。它不管Consumer是否还有unacked Message,只是按照这个默认机制进行分发。
prefetch_count=1 (channel.basic_qos(prefetch_count=1) )
通过这个设置,可以是客户端,同一时间最多处理一个message,这种方法可能会导致queue满。当然,这种情况下你可能需要添加更多的Consumer,或者创建更多的virtualHost来细化你的设计。 - queue 和exchange 创建完之后,就不会改变了, 但是可以修改queue 的binding key
- 要建立 binding key ; exchange,要一起设置
rabbitmq 对象属性
exchange属性
Type
: exchange类型fanout、direct、topic、header
Durability
: 持久性,这是exchange的可选属性,如果你Durability设置为false,那些当前会话结束的时候,该exchange也会被销毁。 新建一个transient exchangeAuto delete
: 当没有队列或者其他exchange绑定到此exchange的时候,该exchange被销毁。这个很简单就不示例了。Internal
:表示这个exchange不可以被client用来推送消息,仅用来进行exchange和exchange之间的绑定。
Queue 属性
Durability
和exchange相同,未持久化的队列,服务重启后销毁。Auto delete
: 当没有消费者连接到该队列的时候,队列自动销毁。Exclusive
:使队列成为私有队列,只有当前应用程序可用,当你需要限制队列只有一个消费者,这是很有用的。Message TTL
:在队列自动删除之前可以保留多长时间(对应扩展参数argument “x-expires”)Max length
: 一个队列可以容纳的已准备消息的数量(对应扩展参数argument “x-max-length”) ps:一旦创建了队列和交换机,就不能修改其标志了。例如,如果创建了一个non-durable的队列,然后想把它改变成durable的,唯一的办法就是删除这个队列然后重现创建。
Message 属性
Durabillity
: 消息的持久在代码中设置的方法与exchange和queue不同, (DeliveryMode=2)contentType
: 标识消息内容的MIME,例如JSON用application/jsonreplayTo
: 标识回调的queue的地址correlationId
:用于request和response的关联,确保消息的请求和响应的同一性- 状态
Ready
: 此状态的消息存在于队列中待处理。 –Unacknowledged
: 此状态的消息表示已经在处理未确认。 6.