中间件RabbitMQ之运维篇

1、RabbtMQ简介

       RabbitMQ的官方站: http:/://www.rabbitmq.com/
       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 交换机转发消息是最快的。mysql

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

2、RabbitMQ安装及启动

  rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpmlinux

  yum install -y rabbitmq-server.noarchweb

  /sbin/rabbitmq-plugins listsql

  /sbin/rabbitmq-plugins enable rabbitmq_management后端

  systemctl start rabbitmq-server.service 等价 /sbin/rabbitmq-server start | stop | restart | reload服务器

2、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:日志文件路径
 
二、rabbitm.config这是一个标准的erlang配置文件。它必须符合erlang配置文件的标准。Erlangtuple,结构为{Key, Value} ,Key为atom类型,Value为一个term, 其中几个关键参数为:
  一、tcp_listerners设置rabbitmq的监听端口,默认为[5672].
  二、disk_free_limit磁盘低水位线,若磁盘容量低于指定值则中止接收数据。
  三、vm_memory_high_watermark, 设置内存低水位线, 若低于该水位线,则开启流控机制,默认值是0.4.即内存总量的40%。

3、RabbitMQ命令介绍及web界面操做

  一、rabbitmqctl add_user username password  添加用户及密码;

[root@mage-monitor-01~/]#/sbin/rabbitmqctl add_user xiaoming 123456
Creating user "xiaoming" ...
...done.

   也能够在web页面操做:登陆http://10.0.0.201:15672 (你本身的IP),用户guest(超级用户),密码:guest架构

 

  二、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.

 

 

三、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.

   

 

三、rabbitmqctl change_password username newpassword  修改用户密码; /sbin/rabbitmqctl delete_user <username> 删除用户;

[root@mage-monitor-01~/]#/sbin/rabbitmqctl delete_user xiaoming
Deleting user "xiaoming" ...
...done.

    

  四、rabbitmqctl list_queues   显示全部队列。

  五、rabbitmqctl list_vhosts  遍历全部虚拟主机信息;

相关文章
相关标签/搜索