rabbitmq-web界面:

  • Admin

    • Users

      • 设置角色

      • virtual hosts权限

        • 说明:

          • virtual host相当于一个单独的rabbitmq服务器,每个virtual是独立的,不可互通的,相当于mysql中的数据库,都是独立的,可以单独设置权限,Virtual Name一般以/开头

        • 添加chost及授权:

          • sudo rabbitmqctl add_vhost myvhost

          • sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"

    • Virtual Hosts

      • 添加用户的virtual hosts权限

        • sudo rabbitmqctl add_vhost /testvhost

        • sudo rabbitmqctl set_permissions -p /testvhost admin ".*" ".*" ".*"

        • broker的配置:

          broker='amqp://admin:admin@localhost:5672//testvhost'

    • Policies:策略(高级)

      • 为什么要使用policy

        • 一个策略按名称匹配一个或多个队列(使用正则表达式模式),可以使用策略一次为多个队列配置x参数,并通过更新策略定义一次全部更新它们。

      • 定义 Policies 的方法,目前有三种途径:

        • 通过 rabbitmqctl 命令创建

        • 通过 RabbitMQ REST API

        • 通过管理插件(web)

      • Policy 各属性解释:

        • name:名字,可以使用任意字符,建议不要使用空格

        • pattern:用于匹配队列/交换机的正则表达式

        • apply-to:该 Policy 是针对队列,还是交换机,还是同时针对两者

        • priority:优先级。一个队列/交换机只会有一个生效的 Policy,如果匹配多个 Policy,则优先级数值最大的 Policy 生效

        • definition:JSON格式的一组键值对,表示设置的属性,会被注入匹配队列/交换机

        • 官方文档:

  • Queue:队列

    • 队列的增加

    • 详情

      • Overview

      • Consumers

      • Bindings

      • Publish message

      • Get messages

      • Move messages

      • Delete / purge:删除队列:Delete / 清空队列:Purge

  • Exchange:交换

    • 增加交换器

    • 详情

      • Overview

      • Bindings

      • Publish message

      • Delete this exchange

  • Channels:频道、信道

    • channel是建立在真实的连接内的虚拟连接

    • 每条channel都会被指派一个唯一ID

    • 一个TCP连接,对应多个channel,理论上无限制,减少TCP创建和销毁的开销,实现共用TCP的效果

    • 与RabbitMQ打交道的最重要的一个接口

    • 注:一个生产者或一个消费者与MQ服务器之间只有一条TCP连接

  • Connections

    • 一个TCP连接

  • Connections和Channel的区别

    • Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

    • 如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,channel之间是完全隔离的

    • Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销

  • Overview

    • ready

      • 如果队列中ready状态的消息数比较多,可以认为是消费者的处理能力不足,可以通过增加消费者来解决

    • unacked

      • 消费者取走消息后没有及时做消息确认,对于开启手动确认机制的,不进行ack则消息会一直以unacked状态留在队列中。默认是自动应答

      • 消费者处理能力不足。生产者投放消息的速度较快,当消费者按照设置的值(prefetch_count)取走相应数量的消息时,这些消息都会暂时处于unacked状态。

      • 消费者挂掉后,unacked的消息会变成ready状态的消息重新放在队列中,待下次消费者启动后可以直接读取