• 下载

由于RabbitMQ是基于Erlang语言开发,所以在安装RabbitMQ之前,需要先安装Erlang。好在RabbitMQ官网已经为我们提供了Erlang的安装包

Erlang下载地址:http://www.rabbitmq.com/releases/erlang/

本人使用的操作系统为:CentOS7

下载的Erlang安装包为:erlang-19.0.4-1.el7.centos.x86_64.rpm

RabbitMQ下载地址:https://www.rabbitmq.com/download.html

下载的RabbitMQ安装包为:rabbitmq-server-3.6.8-1.el7.noarch.rpm

  • 安装

将下载的两个文件上传到/usr/local目录,先安装Erlang

yum install erlang-19.0.-.el7.centos.x86_64.rpm

测试Erlang是否安装成功

erl -version

出现以下信息则表示安装成功:Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 8.0.3

安装RabbitMQ

yum install rabbitmq-server-3.6.-.el7.noarch.rpm

运行RabbitMQ

cd /usr/sbin
./rabbitmq-server start

出现以下信息,则表示启动成功:


RabbitMQ 3.6.8. Copyright (C) 2007-2016 Pivotal Software, Inc.
## ## Licensed under the MPL. See http://www.rabbitmq.com/
## ##
########## Logs: /var/log/rabbitmq/rabbit@mq01.log
###### ## /var/log/rabbitmq/rabbit@mq01-sasl.log
##########
Starting broker...
completed with 0 plugins.


后台启动可使用:

./rabbitmq-server -detached

停止服务可使用:

./rabbitmqctl stop
  • 插件安装

查看目前RabbitMQ已安装的插件

cd /usr/sbin
./rabbitmq-plugins list
  • 安装web管理端

./rabbitmq-plugins enable rabbitmq_management

安装成功后,启动MQ

通过浏览器访问地址:http://192.168.120.129:15672/#/

由于guest用户被限制,只能通过localhost访问,因此我们需要新建一个用户,并授予管理员权限。

新建一个用户名为admin,密码为admin的用户,并授予管理员(administrator)权限

./rabbitmqctl add_user admin admin
./rabbitmqctl set_user_tags admin administrator
  • 安装mqtt

./rabbitmq-plugins enable rabbitmq_mqtt
  • 安装websocket

./rabbitmq-plugins enable rabbitmq_web_stomp
./rabbitmq-plugins enable rabbitmq_web_stomp_examples
  • 配置

如果需要修改RabbitMQ的默认配置,先查找配置文件样例位置

find / -name "rabbitmq.config.example"

然后将样例配置复制到制定目录

cp /usr/share/doc/rabbitmq-server-3.6./rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

修改样例文件,并保存,重启MQ生效。

  • 权限

主要是set_permissions的使用,先看下命令的格式:

set_permissions [-p vhost] {user} {conf} {write} {read}

首先需要注意以下几点的理解:

1.这里的权限,只是针对一般用户的访问权限,注意和角色的区分。举个例子来说,非管理用户(普通用户),角色设置为none,然后在这里配置conf、write、read的权限。

2.conf、write、read采用正则表达式,这里的正则主要是针对exchange和queue。主要2种特殊的表达式:

^$:表示完全不匹配(即没有权限)

.*:表示匹配所有(即所有权限)

如果使用RabbitMQ作为消息推送服务,需要授予用户只读访问Stomp主题权限,同时授予另一个用户对同一主题的读写访问权限。

这样的话主题订阅者就不能发布消息,从而解决安全性问题。

但是如果直接这样授权:

rabbitmqctl set_permissions read-only-user '.*' '^$' '.*' 

会报如下错误:

 ERROR message:access_refused content-type:text/plain version:1.0,1.1,1.2 content-length:114 ACCESS_REFUSED - access to queue 'stomp-subscription-APK3zkvXFqxvSiZ9ztmxYQ' in vhost '/' refused for user 'test' Whoops! Lost connection to ws://221.0.200.202:15674/ws

这样配置存在一个问题,将阻止任何写入,阻止任何写入将导致没有权限连接到RabbitMQ的服务

需要对可读用户权限做如下调整:

rabbitmqctl set_permissions read-only-user '^stomp-subscription.*$' '^stomp-subscription.*$' '.*' 

  • 集群模式

RabbitMQ集群模式分为两种:普通模式,镜像模式(HA)

  普通模式:默认的集群模式

对于Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构。

当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。

所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连A或B,出口总在A,会产生瓶颈。

该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。

如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化的话,然后就没有然后了……

  镜像模式:把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案

该模式解决了上述问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在consumer取数据时临时拉取。

该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。

所以在对可靠性要求较高的场合中适用。

  • 服务器信息:

 我们准备了两台服务器,系统为Centos7,对应的ip跟hostname分别为

192.168.1.242    mq01
192.168.1.243 mq02

 在安装好的两台节点服务器中,分别修改/etc/hosts文件,指定mq01,mq02的hosts,如:

192.168.1.242    mq01
192.168.1.243 mq02

 注意:hostname文件也要正确,分别是mq01、mq02,如果修改hostname建议在安装rabbitmq前修改。

  • 设置 Erlang Cookie:

Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信。

查看文件权限的命令为:

ls -l /var/lib/rabbitmq/.erlang.cookie

这里将 mq01的 /var/lib/rabbitmq/.erlang.cookie文件复制到 mq02,由于这个文件权限是 400,所以需要先修改该文件权限为 777:

chmod  /var/lib/rabbitmq/.erlang.cookie

使用scp或其他方式将该文件复制到mq02服务器的相同目录,并覆盖。

然后将mq01的 /var/lib/rabbitmq/.erlang.cookie文件权限修改回来

chmod  /var/lib/rabbitmq/.erlang.cookie
  • 组成集群

重启RabbitMQ服务:

rabbitmqctl stop
rabbitmq-server -detached

将mq02与mq01组成集群:

./rabbitmqctl stop_app
./rabbitmqctl join_cluster rabbit@mq01
./rabbitmqctl stop
./rabbitmq-server -detached

如果要使用内存节点,则可以使用--ram:

rabbitmqctl join_cluster --ram rabbit@mq01

查看集群是否配置成功:

rabbitmqctl cluster_status
  • HA集群模式配置

 上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。

  • 设置镜像队列策略

在任意一个节点上执行:

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。

如果要为制定的vhost创建策略则使用-p:

rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'
这行命令在vhost名称为hrsystem创建了一个策略,策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,
策略正则表达式为 “^” 表示所有匹配所有队列名称。
例如rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'

注意:"^message" 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,我们配置时使用的应用于所有队列,所以表达式为"^"

 
  • 安装并配置 HAProxy

在 服务器上安装 HAProxy,然后修改
/etc/haproxy/haproxy.cfg:

listen rabbitmq_cluster 0.0.0.0:

mode tcp
balance roundrobin server node1 192.168.1.242: check inter rise fall
server node2 192.168.1.243: check inter rise fall

RabbitMQ安装及使用的更多相关文章

  1. RabbitMQ学习系列(二): RabbitMQ安装与配置

    上一篇,简单介绍了RabbitMQ的情况还有一些相关的概念,这一篇,会讲讲 RabbitMQ安装与配置. 1.安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitM ...

  2. RabbitMQ安装配置

    安装RabbitMQ windows下的安装是非常简单的,我们需要准备两个东西 erlang的环境  下载windows和与之对象的操作系统位数安装包 http://www.erlang.org/do ...

  3. RabbitMQ安装和配置

    RabbitMQ: MQ:message queue.MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来 ...

  4. windows 下rabbitmq 安装---转载

    原文地址:http://blog.sina.com.cn/s/blog_7cc0c8cc0101mb4a.html 1.下载并安装erlang,http://www.erlang.org/downlo ...

  5. Day11 Memcached、Redis和RabbitMQ安装

    修改Ubuntu镜像源: sudo vi /etc/apt/sources.list 全部替换为以下内容: ---------------------------------------------- ...

  6. rabbitmq安装Management Plugin

    运行和安装Rabbitmq Management的步骤如下: 1.进入Rabbitmq安装目录,运行rabbitmq-plugins enable rabbitmq_management 2.运行ra ...

  7. RabbitMQ安装与初始配置

    [TOC] 本文只讨论linux下的Rabbitmq安装. Erlang安装 rabbitmq依赖于Erlang,需先安装,推荐安装rabbitmq/erlang-rpm: #clone源码 git ...

  8. Linux下RabbitMq安装

    在大多数大公司,像应用服务器软件的安装.部署都是运维的事情,其实自己去尝试部署一下,也是有收获的. 有机会正好尝试了Linux下的rabbitMq安装过程,做了记录,希望有用到的人可以做下参考. 安装 ...

  9. Windows下RabbitMQ安装及入门

    1.Windows下安装RabbitMQ需要以下几个步骤 (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang. ...

  10. (一)surging 微服务框架使用系列之surging 的准备工作rabbitmq安装

    (1)下载erlang: http://www.erlang.org/download/otp_win64_17.3.exe 并安装 (2)下载RabbitMQ: http://www.rabbitm ...

随机推荐

  1. cocos2dx lua invalid 'cobj' in function 'lua_cocos2dx'

    解决方法 在创建 Node节点后 调用父节点 retain() 方法 手动增加引用 一般调用:clone()方法会出现,在变量后面加上对一个对应的retain() 方法

  2. IMDG

    将内存作为首要存储介质不是什么新鲜事儿,在对主存的使用上,内存数据网格(In Memory Data Grid,IMDG)与IMDB类似,但二者在架构上完全不同.IMDG特性可以总结为以下几点: 数据 ...

  3. Winform外包团队 项目案例展示

    北京动点飞扬软件开发团队 C# WInform项目案例展示 长年承接WInForm C#项目开发,商业案例欢迎联系我们索取 有相关项目外包定制开发 欢迎联系我们 qq372900288 Tel 139 ...

  4. WebService之客户端

    创建项目 File→New→Other→Web Services→Web Service Client中输入从服务端得到的wsdl链接: http://localhost:8080/WS_WebSer ...

  5. MARK DOWN 书写格式说明

    MarkdownPad2 书写格式说明: Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,而MarkdownPad2是其中一种支持M ...

  6. C# 如何获取SQL Server 中指定数据表的所有字段名和字段类型

    如何获取指定数据表的所有字段名和字段类型.SqlConnection.GetSchema方法有2个重载形式,获取指定数据表的所有字段名和字段类型的秘密就在GetSchema (String, Stri ...

  7. CUDA 编程

    作者:MingChaoSun 原文:https://blog.csdn.net/sunmc1204953974/article/details/51000970 一.CPU和GPU 上图是CPU与GP ...

  8. 纵观 jBPM:从 jBPM3 到 jBPM5 以及 Activiti5

    https://www.infoq.cn/article/rh-jbpm5-activiti5# 对jBPM来说,今年最大的事件莫过于 jBPM 的创建者Tom Baeyens离开 JBoss 了.T ...

  9. SpringCloud项目启动报错:NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable

    报错表象: 当启动SpringClud项目报错: Exception in thread "main" java.lang.NoClassDefFoundError: org/sp ...

  10. python_项目_ATM和购物商城的程序

    1 需求 模拟实现一个ATM + 购物商城程序 额度15000或自定义 实现购物商城,买东西加入购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 ...