一、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 交换机转发消息是最快的。

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

二、RabbitMQ安装及启动

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

  yum install -y rabbitmq-server.noarch

  /sbin/rabbitmq-plugins list

  /sbin/rabbitmq-plugins enable rabbitmq_management

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

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

三、RabbitMQ命令介绍及web界面操作

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

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

  也可以在web页面操作:登录http://10.0.0.201:15672 (你自己的IP),用户guest(超级用户),密码:guest

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

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

  

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

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

  

  4、rabbitmqctl list_queues   显示所有队列。

  5、rabbitmqctl list_vhosts  遍历所有虚拟主机信息;

中间件RabbitMQ之运维篇的更多相关文章

  1. Flume实战案例运维篇

    Flume实战案例运维篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Flume概述 1>.什么是Flume Flume是一个分布式.可靠.高可用的海量日志聚合系统,支 ...

  2. rabbitmq常见运维命令和问题总结

    常见运维命令作用: yum安装erlang的环境配置: ERLANG_HOME=/usr/lib64/erlang export PATH=$PATH:$ERLANG_HOME/bin 常见rabbi ...

  3. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

  4. 【mongoDB运维篇④】Shard 分片集群

    简述 为何要分片 减少单机请求数,降低单机负载,提高总负载 减少单机的存储空间,提高总存空间. 常见的mongodb sharding 服务器架构 要构建一个 MongoDB Sharding Clu ...

  5. RabbitMq相关运维

    # 命令查询所有用户列表rabbitmqctl list_users # 使用命令对 xiandian-admin 用户进行授权set_permissions xiandian-admin '.*' ...

  6. 【mongoDB运维篇②】备份与恢复(导入与导出)

    导入/导出可以操作的是本地的mongodb服务器,也可以是远程的服务器 所以,都有如下通用选项: -h host 主机 --port port 端口 -u username 用户名 -p passwd ...

  7. 【mongoDB运维篇①】用户管理

    3.0版本以前 在mongodb3.0版本以前中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据库.即 use admin , 相当于进入超级用户管理模式,mongo ...

  8. linux中ftp的安装过程记录[运维篇]

    安装FTP的全过程记录,对于相同情况希望有所帮助.[centOS] 1.查询本机是否安装vsftpd: rpm -qa |grep vsftpd : 2.安装ftp服务 yum install vsf ...

  9. 【mongoDB运维篇③】replication set复制集

    介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集的结构以及基本概念 正如上图所示,Mon ...

随机推荐

  1. 2019西湖论剑网络安全技能大赛(大学生组)部分WriteUp

    这次比赛是我参加以来成绩最好的一次,这离不开我们的小团队中任何一个人的努力,熬了一整天才答完题,差点饿死在工作室(门卫大爷出去散步,把大门锁了出不去,还好学弟提了几个盒饭用网线从窗户钓上来才吃到了午饭 ...

  2. objdump和backtrace的配合使用

    在程序调试过程中程序崩溃的情况时有发生,把出问题时的调用栈信息打印出来是一种不错的解决办法. 当然还有一些其他方法:https://www.cnblogs.com/jiangyibo/p/865372 ...

  3. 使用outflux 导入influxdb 的数据到timescaledb

    influxdb 以及timescaledb 都是不错的时序数据库,timescaledb 团队提供了直接从influxdb 导入 环境准备 docker-compose 文件 version: &q ...

  4. 怎样使用PL/SQL在不安装oracle 客户端的情况下使用oracle数据库

    在网上查了好多这方面的例子,但是似乎说的都不准确,在咨询朋友后终于实现了本机不安装oracle 的情况下,在windows系统上实现连接服务器上的数据库,现在贴出来与大家共享. 首先,我们需要一个PL ...

  5. vs2010安装的一些问题

    VS安装出现的问题一般如果出现了  基本就不会安装成功.问题出现的原因有:w7系统的版本,有些可能会安装失败,其次就是你卸载的时候不要把相应 的库及.net的库卸载  后面再安装就容易出错.这个是安装 ...

  6. 单源最短路径算法——Dijkstra算法(迪杰斯特拉算法)

    一 综述 Dijkstra算法(迪杰斯特拉算法)主要是用于求解有向图中单源最短路径问题.其本质是基于贪心策略的(具体见下文).其基本原理如下: (1)初始化:集合vertex_set初始为{sourc ...

  7. 对于使用JDBC连接mysql数据时The server time zone value '¤¤°ê¼Ð·Ç®É¶¡'...的异常问题解决。

    相信很多小伙伴和我一样遇到了这类问题,在使用JDBC连接mysql数据库的时候发生SQLException如下所示的异常情况! java.sql.SQLException: The server ti ...

  8. IDEA—— 找不到或无法加载主类Main

    最近使用idea,编写了一个项目,发现老是找不到main,网上找了一大圈的解决方案,都不行.灵机一动升级了jdk就可以了,之前用的是1.7的,换成了1.8的就好了.

  9. XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  10. 深入学习 Java 序列化

    前言 对于Java的序列化,一直只知道只需要实现Serializbale这个接口就可以了,具体内部实现一直不是很了解,正好这次在重复造RPC的轮子的时候涉及到序列化问题,就抽时间看了下 Java序列化 ...