rabbitMq 安装

  • 安装rabbitmq,必须安装erlang,安装可以下载安装包,也可以下载rpm 文件安装,rabbitmq官网提供了erlang的安装文件,过程中可能会遇到一些问题查看
    1. 问题查看http://thrillerzw.iteye.com/blog/2111335
    2. 下载地址 http://www.rabbitmq.com/releases/erlang/
    3. 版本对照表,下载指定版本的 erlang
    4. 安装 yum install erlang-19.0.4-1.el7.centos.x86_64.rpm
    5. 安装过程 ,提示错误,少了那些依赖包,可参考: http://www.51itong.net/centos6-5-erlang-6590.html
  • 安装 rabbitMq
    1. 下载地址 : http://www.rabbitmq.com/releases/rabbitmq-server/
    2. 安装 : yum install rabbitmq-server-3.6.10-1.el7.noarch.rpm

tip:可以用yum安装,可能版本比较老

配置

  • rabbitmq 安装后,默认的配置
    1. 数据库路径 : /var/lib/rabbitmq
    2. 配置文件路径 : /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
    rabbitmq-plugins disable rabbitmq_managemen
    访问 http://localhost:15672可以查看web管理界面,
    > tips : 从3.4 以后的版本,guest,就只能本机访问了,外部访问不了,推荐添加新的用户和角色,来管理界面
  • 配置外部访问 [
    {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 //查看某个用户权限

概念

概念

  1. product、exchange、binding、queue 、custome 之间的关系
    [图片]()
    [关系]()
  2. 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中可以存在两种特殊字符“”与“#”,用于做模糊匹配,其中“”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)

客户端使用

  1. 查看队列里面的内容
  2. 没有用到超时机制。RabbitMQ仅仅通过Consumer的连接中断来确认该Message并没有被正确处理。也就是说,RabbitMQ给了Consumer足够长的时间来做数据处理。
  3. queue也可以自动删除,被标为auto-delete的queue在最后一个Consumer unsubscribe后就会被自动删除。那么如果是创建一个已经存在的queue呢?那么不会有任何的影响。需要注意的是没有任何的影响,也就是说第二次创建如果参数和第一次不一样,那么该操作虽然成功,但是queue的属性并不会被修改
  4. 如果queue不存在,当然Consumer不会得到任何的Message。但是如果queue不存在,那么Producer Publish的Message会被丢弃。所以,还是为了数据不丢失,Consumer和Producer都try to create the queue!反正不管怎么样,这个接口都不会出问题。
  5. queue也可以自动删除,被标为auto-delete的queue在最后一个Consumer unsubscribe后就会被自动删除。
  6. rabbitMq默认是公平分发,RabbitMQ将第n个Message分发给第n个Consumer。当然n是取余后的。它不管Consumer是否还有unacked Message,只是按照这个默认机制进行分发。 prefetch_count=1 (channel.basic_qos(prefetch_count=1) )通过这个设置,可以是客户端,同一时间最多处理一个message,这种方法可能会导致queue满。当然,这种情况下你可能需要添加更多的Consumer,或者创建更多的virtualHost来细化你的设计。
  7. queue 和exchange 创建完之后,就不会改变了, 但是可以修改queue 的binding key
  8. 要建立 binding key ; exchange,要一起设置

rabbitmq 对象属性

exchange属性

  1. Type : exchange类型fanout、direct、topic、header
  2. Durability : 持久性,这是exchange的可选属性,如果你Durability设置为false,那些当前会话结束的时候,该exchange也会被销毁。    新建一个transient exchange
  3. Auto delete: 当没有队列或者其他exchange绑定到此exchange的时候,该exchange被销毁。这个很简单就不示例了。
  4. Internal:表示这个exchange不可以被client用来推送消息,仅用来进行exchange和exchange之间的绑定。

Queue 属性

  1. Durability和exchange相同,未持久化的队列,服务重启后销毁。
  2. Auto delete : 当没有消费者连接到该队列的时候,队列自动销毁。
  3. Exclusive :使队列成为私有队列,只有当前应用程序可用,当你需要限制队列只有一个消费者,这是很有用的。
  4. Message TTL :在队列自动删除之前可以保留多长时间(对应扩展参数argument “x-expires”)
  5. Max length : 一个队列可以容纳的已准备消息的数量(对应扩展参数argument “x-max-length”) ps:一旦创建了队列和交换机,就不能修改其标志了。例如,如果创建了一个non-durable的队列,然后想把它改变成durable的,唯一的办法就是删除这个队列然后重现创建。

Message 属性

  1. Durabillity : 消息的持久在代码中设置的方法与exchange和queue不同, (DeliveryMode=2)
  2. contentType: 标识消息内容的MIME,例如JSON用application/json
  3. replayTo : 标识回调的queue的地址
  4. correlationId :用于request和response的关联,确保消息的请求和响应的同一性
  5. 状态
  • Ready : 此状态的消息存在于队列中待处理。 – Unacknowledged : 此状态的消息表示已经在处理未确认。 6.