• 下载

由于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. MVC5 方法扩展

    public static MvcHtmlString DataDictionaryDropDownList(this HtmlHelper htmlHelper, string name, obje ...

  2. Web高级 网站安全

    1. SQL注入 虽然现在SQL注入发生的情况总的来说越来越少,还是提二句.关于什么是SQL注入大家都知道就不多说了. 1.1 原理 我们在做前端页面的时候,少不了会又各种输入框,然后通过GET或者P ...

  3. LAB1 partI

    序言 1. master.go 可以正常调用Distributed() 和 Sequential(). Sequential 顺序执行主要用于调试. 2. master : 创建一个 RPC serv ...

  4. Azkaban各种类型的Job编写

    一.概述 原生的 Azkaban 支持的plugin类型有以下这些: command:Linux shell命令行任务 gobblin:通用数据采集工具 hadoopJava:运行hadoopMR任务 ...

  5. ABBYY FineReader 14OCR解锁

    ABBYY FineReader 14是2017年新推的文字处理编辑软件,能够将图像扫描转换成文档处理.不论是在使用群体方面还是功能特性方面都是极好的. •确保扫描仪正确地连接到电脑,并将其打开.查阅 ...

  6. SfMLearner 记录

    2019年3月2日09:29:54 正在看SfMLearner的pytorch源码,意识到无监督的深度估计最重要的是利用实体的一致性 来建立loss. 对于一个不移动的物体,相机从一个pose到另一个 ...

  7. SpringBoot 配置文件 中文乱码

    本方案,支持springboot 很简单 在配置文件中不写中文,写中文的ascll码 直接百度在线转ASCII,用工具 把中文转ASCII码==>\u628a\u4e2d\u6587\u8f6c ...

  8. 刘志梅 2017710101152《面向对象程序设计(java)》 第十周学习总结

    实验十  泛型程序设计技术 实验时间 2018-11-1 1.实验目的与要求 (1)泛型程序设计:意味着编写的代码可以被很多不同类型的对象所重用.(ArrayList类可以聚集任何类型的对象) 如果在 ...

  9. com.android.build.api.transformException报错的解决方法

    最近遇到一个问题:工程需要依赖模块1和模块2,但是模块1和模块2都使用了opencv,但opencv的版本不同,如果同时依赖两个模块,就会报错重复定义...如果模块2依赖模块1,工程再依赖模块2,也会 ...

  10. golang初识3 - func

    1. 功能块(function block) 格式: func function_name( [parameter list] ) [return_types] { //body } 与delphi的 ...