RabbitMQ

MQ(Message Queue,消息队列)是一款消息中间件,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。

集群原理

rabbitmq 是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署rabbitmq分布式集群时要先安装erlang,并把其中一个服务的cookie复制到另外的节点。
rabbitmq集群中,各个rabbitmq为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般的,均应建立为磁盘节点,为了防止机器重启后的消息消失;

RabbitMQ的Cluster集群模式一般分为两种, 普通模式和镜像模式 。消息队列通过rabbitmq HA镜像队列进行消息队列实体复制。

普通模式下, 以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。

镜像模式下, 将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

系统架构

概念说明:

Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
Queue:消息的载体,每个消息都会被投到一个或多个队列
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
Routing Key:路由关键字,exchange根据这个关键字进行消息投递
vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离
Producer:消息生产者,就是投递消息的程序
Consumer:消息消费者,就是接受消息的程序
Channel:消息通道,在客户端的每个连接里,可建立多个channel

系统环境

主机名 操作系统 IP地址 用途
rabbitmq01 Centos 7.4 x86_64 192.168.96.41 磁盘节点
rabbitmq02 Centos 7.4.x86_64 192.168.96.42 内存节点
rabbitmq03 Centos 7.4 x86_64 192.168.96.43 内存节点

开始部署

以下三台服务器部署配置一致,如下步骤1 - 8

1.关闭防火墙及Selinux

setenforce 0
systemctl stop firewalld

2.分别修改三台服务器的主机名

2.1 rabbitmq01服务器

vim /etc/hostname

rabbitmq01

2.2 rabbitmq02服务器

vim /etc/hostname

rabbitmq02

2.3 rabbitmq03服务器

vim /etc/hostname

rabbitmq03

3.分别修改三台服务器的hosts文件

vim /etc/hosts

192.168.96.23   rabbitmq01
192.168.96.21   rabbitmq02
192.168.96.22   rabbitmq03

4.安装最新repo源

yum -y install epel-release

5.安装rabbitmq-server软件包

yum -y install rabbitmq-server

6.查看已安装的插件

rabbitmq-plugins list

7.启动管理服务

rabbitmq-plugins enable rabbitmq_management

8.分别启动rabbitmq服务

systemctl start rabbitmq-server



rabbitmq集群部署

1.先停止rabbitmq服务

systemctl stop rabbitmq-server

2.进入cookie文件目录

cd /var/lib/rabbitmq/

3.编辑.erlang.cookie文件序列号(各节点需要有相同序列号值)

vim .erlang.cookie

4.再启动rabbitmq服务

systemctl start rabbitmq-server

5.停止rabbitmq应用

rabbitmqctl stop_app

6.将rabbitmq02、rabbitmq03加入rabbitmq01,使它们成为一个集群

rabbitmqctl join_cluster --ram rabbit@rabbitmq01

7.启动rabbitmq应用

rabbitmqctl start_app

8.分别查看rabbitmq服务器状态

rabbitmqctl cluster_status

通过客户端浏览器进行访问RabbitMQ (用户名:guest 密码:guest)http://192.168.96.41:15672

转载于:https://blog.51cto.com/10316297/2155665

RabbitMQ消息队列集群相关推荐

  1. 消息队列——RabbitMQ消息队列集群

    RabbitMQ消息队列集群 消息队列/中间件 RabbitMQ详解 RabbitMQ单机部署 RabbitMQ集群部署 消息队列/中间件 一.前言 在我们秒杀抢购商品的时候,系统会提醒我们稍等排队中 ...

  2. 亲测可用,超详细RabbitMQ消息队列集群配置

    RabbitMQ是什么? MQ(Message Queue,消息队列)消息中间件,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息同步. 原理介绍 rabbitmq是依据erlan ...

  3. RabbitMQ#RabbitMQ+Haproxy消息队列集群和代理部署

    文章目录 一.消息队列/中间件 1.RabbitMQ本质上起到的作用就是削峰填谷 2.MQ简介(RabbitMQ比Kafka) 3.MQ消息队列的分类 二.RabbitMQ介绍(端口15672) 1. ...

  4. RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

    在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会 ...

  5. (四)RabbitMQ消息队列-服务详细配置与日常监控管理

    (四)RabbitMQ消息队列-服务详细配置与日常监控管理 原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -de ...

  6. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

  7. java实现RabbitMQ消息队列

    目录 一.什么是MQ? 二.为什么要用MQ? 流量消锋 应用解耦 异步处理 三.MQ分类和使用场景 ​ 四.安装MQ 1.准备工作 2.开始安装 3.结束安装 ​ 五.实践操作: 一.简单模型(sim ...

  8. RabbitMQ高可用集群搭建

    RabbitMQ高可用集群搭建 摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确 ...

  9. 从零开始搭建高可用RabbitMQ镜像模式集群

    文章目录 RabbitMQ集群模式搭建 准备工作 选取任意一个节点作为master节点, 进行文件同步, 我这里选择138作为master节点 组成集群 配置镜像队列(设置镜像队列策略) 集群配置参数 ...

最新文章

  1. js调用ios的方法
  2. 简单的Java双亲委派机制
  3. 写一个android图表框架1
  4. 点击文字弹出一个DIV层窗口代码 【或FORM表单 并且获取点击按钮的ID值】
  5. Adaboost from Baidu
  6. jQuery插件开发
  7. 『 申请地址 』阿里云网盘限时开放内测申请!
  8. java的if里有多个if_代码里写很多if会影响效率吗?
  9. 深度学习之RetinaNet
  10. 雷军:全面屏新零售微信都是我先提的,为什么你们只记住了苹果马云张小龙?
  11. [CF55D]Beautiful Number 题解
  12. WindowXP与WIN7环境安装、破解、配置AppScan8.0
  13. 视频倍速调整(ffmpeg)
  14. graylog+kafka+zookeeper(单机测试及源码),graylog收集kafka(脚本创建发布订阅方式)存储的消息(四)
  15. 详解Android刘海屏适配
  16. 我的世界服务器增加刷怪率,教你制作服务器中更高效率的刷怪塔
  17. Zynq-Linux移植学习笔记之34-使用PCS/PMA IP核配置网络
  18. 北大才女笔记:这样学习线性回归和梯度下降(上篇)
  19. 前端脚手架是指什么?
  20. 别再羡慕马斯克的脑机接口了!中国强大的脑机接口在这里

热门文章

  1. 3dmax导出obj序列_Houdini导出序列图片
  2. c语言的返回类型是指针变量吗,C语言-指针类型
  3. zend 安装php 5.6,CentOS7.0+Zend Guard Loader for PHP 5.6环境搭建
  4. Jmeter的Throughput有误差与分布式测试时的坑
  5. 【3】测试用例设计-因果图
  6. 惨遭打脸:字节某部门竟然有这么多测试
  7. (四)Linux 安装 jdk
  8. 城轨的两类时钟系统均同步于_推介中央电视台4K IP化移动外场系统搭建中解决的主要问题...
  9. 全国计算机等级考证管理系统,猎证全国计算机等级考试学习系统
  10. php 查询cpu使用率,php获取CPU使用情况的代码