阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

RabbitMQ概念及环境搭建

142次阅读
没有评论

共计 18793 个字符,预计需要花费 47 分钟才能阅读完成。

RabbitMQ 概念及环境搭建 - 单节点安装与配置

###############################################
# 异步、分布式消息处理模型
###############################################

                                                    binding  +———-+    +—————-+
                                                /————+ queue +—+ consumer +
+—————+  +—————-+  |            +———–+  +—————-+
+ publisher +—+ exchange +—|
+—————+  +—————-+  \          +———–+  +—————-+
                                                      ———–+ queue +—+ consumer +
                                                  binding  +———–+  +—————-+

################################################
RabbitMQ Server 安装
################################################
1. 安装 Erlang
sudo yum install erlang

2. 安装 RabbitMQ Server
需要先导入 key
sudo rpm –import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
可先将内容保存至文本文件,如,rabbitmq-signing-key-public.asc.txt
sudo rpm –import rabbitmq-signing-key-public.asc.txt

3. 安装 rabbitmq-server-3.4.1-1.noarch.rpm
sudo yum install rabbitmq-server-3.4.1-1.noarch.rpm

4. 启动 RabbitMQ Server
注册为系统服务
sudo chkconfig rabbitmq-server on
启动 RabbitMQ Server
sudo /etc/init.d rabbitmq-server stop/start/etc
sudo service rabbitmq-server stop/start/etc

5. 若启动失败检测端口是否被占用
4369 (epmd), 25672 (Erlang distribution)
5672, 5671 (AMQP 0-9-1 without and with TLS)
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)

参考:
http://www.rabbitmq.com/install-rpm.html

##################################################
RabbitMQ Server 配置
##################################################
1. 通过环境变量进行配置
可直接在 Shell 中进行配置
或在 rabbitmq-env.conf 中配置

2. 通过配置文件进行配置
sudo cp /usr/share/doc/rabbitmq-server-3.4.1/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
sudo vim /etc/rabbitmq/rabbitmq.config

相关文件位置
对于 RPM 为 /etc/rabbitmq/,如 /etc/rabbitmq/rabbitmq.config、/etc/rabbitmq/rabbitmq-env.conf

3. 运行时配置

参考:
http://www.rabbitmq.com/configure.html

#################################################
#RabbitMQ 日志、用户、client
#################################################
1. 日志
ls -l /var/log/rabbitmq

2. 默认 virtual host 与默认 user
virtual host: /
user:guest
passwd:guest
注:默认用户只可在 localhost 上连至 / 且有全部权限

3.RabbitMQ Client
Python client
pika-0.9.14.tar.gz
tar -xzvf pika-0.9.14.tar.gz
cd pika-0.9.14
sudo python27 setup.py install

JS client
amqp.node

 

CentOS 5.6 安装 RabbitMQ http://www.linuxidc.com/Linux/2013-02/79508.htm

RabbitMQ 客户端 C ++ 安装详细记录 http://www.linuxidc.com/Linux/2012-02/53521.htm

用 Python 尝试 RabbitMQ http://www.linuxidc.com/Linux/2011-12/50653.htm

RabbitMQ 集群环境生产实例部署 http://www.linuxidc.com/Linux/2012-10/72720.htm

Ubuntu 下 PHP + RabbitMQ 使用 http://www.linuxidc.com/Linux/2010-07/27309.htm

在 CentOS 上安装 RabbitMQ 流程 http://www.linuxidc.com/Linux/2011-12/49610.htm

 

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-12/110449p2.htm

RabbitMQ 概念及环境搭建(二)RabbitMQ Broker 管理

rabbitmqctl [-n node] [-q] {command} [command options…]
1. 停 Server
rabbitmqctl stop

2. 查看状态
rabbitmqctl status

其他常用项
sudo rabbitmqctl list_queues
sudo rabbitmqctl list_exchanges
sudo rabbitmqctl list_bindings

3.UI
rabbitmq-management plugin
基于 HTTP 的 RabbitMQ server 管理和监控工具
包含基于浏览器的用户界面和命令行工具 rabbitmqadmin.

启用
sudo rabbitmq-plugins enable rabbitmq_management

访问

http://server-name:15672/
http://server-name:15672/api #HTTP API
http://server-name:15672/cli #rabbitmqadmin

提示
默认 guest 账户只能从 localhost 登录,需先添加用户用赋予相应权限
可通过配置 rabbitmq.config 改变 rabbitmq-management plugin 默认行为

4. 用户管理(增删改查)
新增用户
rabbitmqctl  add_user  Username  Password
删除用户
rabbitmqctl  delete_user  Username
修改密码
rabbitmqctl  change_password  Username  Newpassword
查看用户列表
rabbitmqctl  list_users

5. 用户角色
分为五类,其他、management、policymaker、monitoring、administrator、
各自的权限如下:
(None) 
No access to the management plugin

management 
Anything the user could do via AMQP plus:
List virtual hosts to which they can log in via AMQP
View all queues, exchanges and bindings in “their” virtual hosts
View and close their own channels and connections
View “global” statistics covering all their virtual hosts, including activity by other users within them

policymaker
Everything “management” can plus:
View, create and delete policies and parameters for virtual hosts to which they can log in via AMQP

monitoring 
Everything “management” can plus:
List all virtual hosts, including ones they could not log in to via AMQP
View other users’s connections and channels
View node-level data such as memory use and clustering
View truly global statistics for all virtual hosts

administrator 
Everything “policymaker” and “monitoring” can plus:
Create and delete virtual hosts
View, create and delete users
View, create and delete permissions
Close other users’s connections

设置用户角色
rabbitmqctl  set_user_tags  User  Tag
Tag 为角色名 administrator,monitoring,policymaker,management 或其他自定义名称

可给同一用户设置多个角色,如:
rabbitmqctl set_user_tags testmq monitoring policymaker administrator

参考:
http://www.rabbitmq.com/management.html

6. 用户权限
指用户对 exchange,queue 的操作权限,包括配置权限,读写权限。
配置权限会影响到 exchange,queue 的声明和删除。
读写权限影响到从 queue 里取消息,向 exchange 发送消息以及 queue 和 exchange 的绑定 (bind) 操作。

例如:
将 queue 绑定到某 exchange 上,需要具有 queue 的可写权限,以及 exchange 的可读权限;
向 exchange 发送消息需要具有 exchange 的可写权限;
从 queue 里取数据需要具有 queue 的可读权限.

设置用户权限
rabbitmqctl  set_permissions  -p  VHostPath  User  ConfP  WriteP  ReadP
查看 (指定 hostpath) 所有用户的权限信息
rabbitmqctl  list_permissions  [-p  VHostPath]
查看指定用户的权限信息
rabbitmqctl  list_user_permissions  User
清除用户的权限信息
rabbitmqctl  clear_permissions  [-p VHostPath]  User

参考:
http://www.rabbitmq.com/access-control.html

RabbitMQ 概念及环境搭建 - 单节点安装与配置

###############################################
# 异步、分布式消息处理模型
###############################################

                                                    binding  +———-+    +—————-+
                                                /————+ queue +—+ consumer +
+—————+  +—————-+  |            +———–+  +—————-+
+ publisher +—+ exchange +—|
+—————+  +—————-+  \          +———–+  +—————-+
                                                      ———–+ queue +—+ consumer +
                                                  binding  +———–+  +—————-+

################################################
RabbitMQ Server 安装
################################################
1. 安装 Erlang
sudo yum install erlang

2. 安装 RabbitMQ Server
需要先导入 key
sudo rpm –import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
可先将内容保存至文本文件,如,rabbitmq-signing-key-public.asc.txt
sudo rpm –import rabbitmq-signing-key-public.asc.txt

3. 安装 rabbitmq-server-3.4.1-1.noarch.rpm
sudo yum install rabbitmq-server-3.4.1-1.noarch.rpm

4. 启动 RabbitMQ Server
注册为系统服务
sudo chkconfig rabbitmq-server on
启动 RabbitMQ Server
sudo /etc/init.d rabbitmq-server stop/start/etc
sudo service rabbitmq-server stop/start/etc

5. 若启动失败检测端口是否被占用
4369 (epmd), 25672 (Erlang distribution)
5672, 5671 (AMQP 0-9-1 without and with TLS)
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)

参考:
http://www.rabbitmq.com/install-rpm.html

##################################################
RabbitMQ Server 配置
##################################################
1. 通过环境变量进行配置
可直接在 Shell 中进行配置
或在 rabbitmq-env.conf 中配置

2. 通过配置文件进行配置
sudo cp /usr/share/doc/rabbitmq-server-3.4.1/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
sudo vim /etc/rabbitmq/rabbitmq.config

相关文件位置
对于 RPM 为 /etc/rabbitmq/,如 /etc/rabbitmq/rabbitmq.config、/etc/rabbitmq/rabbitmq-env.conf

3. 运行时配置

参考:
http://www.rabbitmq.com/configure.html

#################################################
#RabbitMQ 日志、用户、client
#################################################
1. 日志
ls -l /var/log/rabbitmq

2. 默认 virtual host 与默认 user
virtual host: /
user:guest
passwd:guest
注:默认用户只可在 localhost 上连至 / 且有全部权限

3.RabbitMQ Client
Python client
pika-0.9.14.tar.gz
tar -xzvf pika-0.9.14.tar.gz
cd pika-0.9.14
sudo python27 setup.py install

JS client
amqp.node

 

CentOS 5.6 安装 RabbitMQ http://www.linuxidc.com/Linux/2013-02/79508.htm

RabbitMQ 客户端 C ++ 安装详细记录 http://www.linuxidc.com/Linux/2012-02/53521.htm

用 Python 尝试 RabbitMQ http://www.linuxidc.com/Linux/2011-12/50653.htm

RabbitMQ 集群环境生产实例部署 http://www.linuxidc.com/Linux/2012-10/72720.htm

Ubuntu 下 PHP + RabbitMQ 使用 http://www.linuxidc.com/Linux/2010-07/27309.htm

在 CentOS 上安装 RabbitMQ 流程 http://www.linuxidc.com/Linux/2011-12/49610.htm

 

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-12/110449p2.htm

RabbitMQ 概念及环境搭建(三)RabbitMQ cluster

测试环境:VMS00781 VMS00782 VMS00386 (CentOS5.8)
1. 先在三台机器上分别安装 RabbitMQ Server

2. 读取其中一个节点的 cookie,并复制到其他节点(节点间通过 cookie 确定相互是否可通信)
两者之一均可:
sudo vim /var/lib/rabbitmq/.erlang.cookie
sudo vim $HOME/.erlang.cookie

3. 逐个启动节点
sudo service rabbitmq-server start

4. 查看各节点中的 RabbitMQ brokers
sudo rabbitmqctl cluster_status

5. 建集群
分别在 VMS00386、VMS00782 上执行
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster –ram rabbit@VMS00781
sudo rabbitmqctl start_app
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@VMS00781
sudo rabbitmqctl start_app

6. 排错
建集群过程中碰到如下错误:
sudo rabbitmqctl join_cluster –ram rabbit@VMS00386
Clustering node rabbit@VMS00782 with rabbit@VMS00386 …
Error: unable to connect to nodes [rabbit@VMS00386]: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@VMS00386]
rabbit@VMS00386:
  * unable to connect to epmd (port 4369) on VMS00386: nxdomain (non-existing domain)
current node details:
– node name: ‘rabbitmqctl-8666@VMS00782’
– home dir: /var/lib/rabbitmq
– cookie hash: 50YO3zK+HJHos0tab1vHjg==
解决之道:
集群节点间需能互相访问,故每个集群节点的 hosts 文件应包含集群内所有节点的信息以保证互相解析
vim /etc/hosts
781’s IP  VMS00781
782’s IP  VMS00782
386’s IP  vms00386
之后重启各节点中的 rabbitmq

7. 其他问题
Error: mnesia_unexpectedly_running
原因:忘记先停止 stop_app
解决:sudo rabbitmqctl stop_app

若 rabbitmq-server 第一次启动后 hostname 不能被解析或者发生了更改则会导致启动失败
需执行如下操作
sudo rm -rf /var/lib/rabbitmq/mnesia(因为相关信息会记录在此数据库)
重装 RabbitMQ Server

#####################################################
RabbitMQ cluster 管理
#####################################################
1. 查看集群状态
可分别在集群中各个节点执行
sudo rabbitmqctl cluster_status

2. 更改节点类型(内存型或磁盘型)
sudo rabbitmqctl stop_app
sudo rabbitmqctl change_cluster_node_type disc

sudo rabbitmqctl change_cluster_node_type ram
sudo rabbitmqctl start_app

3. 重启 cluster 中的节点
停止某个节点或者节点 down 掉剩余节点不受影响
[op1@vms00386 ~]$ sudo rabbitmqctl stop
Stopping and halting node rabbit@vms00386 …

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00782,rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00782 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00781,rabbit@VMS00782]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo rabbitmqctl stop
Stopping and halting node rabbit@VMS00782 …

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

待节点重启后自动追上其他节点
[op1@vms00386 ~]$ sudo service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@vms00386,rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00782,rabbit@vms00386,rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00782 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00781,rabbit@vms00386,rabbit@VMS00782]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@vms00386 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@vms00386 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00782,rabbit@VMS00781,rabbit@vms00386]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

几点注意:
保证集群中至少有一个磁盘类型的节点以防数据丢失,在更改节点类型时尤其要注意。
若整个集群被停掉了,应保证最后一个 down 掉的节点被最先启动,若不能则要使用 forget_cluster_node 命令将其移出集群
若集群中节点几乎同时以不可控的方式 down 了此时在其中一个节点使用 force_boot 命令重启节点

4. 从集群移除节点
[op1@vms00386 ~]$ sudo rabbitmqctl stop_app
Stopping node rabbit@vms00386 …
[op1@vms00386 ~]$ sudo rabbitmqctl reset
Resetting node rabbit@vms00386 …
[op1@vms00386 ~]$ sudo rabbitmqctl start_app
Starting node rabbit@vms00386 …

[op1@vms00386 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@vms00386 …
[{nodes,[{disc,[rabbit@vms00386]}]},
 {running_nodes,[rabbit@vms00386]},
 {cluster_name,<<“rabbit@vms00386”>>},
 {partitions,[]}]

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782]}]},
 {running_nodes,[rabbit@VMS00782,rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00782 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782]}]},
 {running_nodes,[rabbit@VMS00781,rabbit@VMS00782]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]
可见 rabbit@vms00386 成为了独立的节点,原集群只剩 rabbit@VMS00781,rabbit@VMS00782 了

也可在某个节点移除集群中其他节点
如继续在 rabbit@VMS00781 上移除 rabbit@VMS00782
[op1@VMS00781 ~]$ sudo rabbitmqctl forget_cluster_node rabbit@VMS00782
Removing node rabbit@VMS00782 from cluster …

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781]}]},
 {running_nodes,[rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

可见集群只剩 rabbit@VMS00781 一个节点了

这里有个问题,在远程其他节点中被移除的节点会自认为仍属于集群

[op1@VMS00782 ~]$ sudo rabbitmqctl start_app
Starting node rabbit@VMS00782 …
BOOT FAILED
===========
Error description:
  {error,{inconsistent_cluster,”Node rabbit@VMS00782 thinks it’s clustered with node rabbit@VMS00781, but rabbit@VMS00781 disagrees”}}
Log files (may contain more information):
  /var/log/rabbitmq/rabbit@VMS00782.log
  /var/log/rabbitmq/rabbit@VMS00782-sasl.log
Stack trace:
  [{rabbit_mnesia,check_cluster_consistency,0},
    {rabbit,’-start/0-fun-0-‘,0},
    {rabbit,start_it,1},
    {rpc,’-handle_call_call/6-fun-0-‘,5}]
Error: {rabbit,failure_during_boot,
          {error,
              {inconsistent_cluster,
                  “Node rabbit@VMS00782 thinks it’s clustered with node rabbit@VMS00781, but rabbit@VMS00781 disagrees”}}}
需要重置一下
[op1@VMS00782 ~]$ sudo rabbitmqctl reset
Resetting node rabbit@VMS00782 …
[op1@VMS00782 ~]$ sudo rabbitmqctl start_app
Starting node rabbit@VMS00782 …

此时三个节点均已成为独立的节点
其中 rabbit@vms00386、rabbit@VMS00782 均被重置为了新的 RabbitMQ broker 而 rabbit@VMS00781 还保留着原 cluster 的残留状态可通过如下步骤重置
[op1@VMS00781 ~]$ sudo rabbitmqctl stop_app
Stopping node rabbit@VMS00781 …
[op1@VMS00781 ~]$ sudo rabbitmqctl reset
Resetting node rabbit@VMS00781 …
[op1@VMS00781 ~]$ sudo rabbitmqctl start_app
Starting node rabbit@VMS00781 …

5. 自动配置 cluster
显然,这是通过配置文件而非命令行工具进行的
首先重置各节点
[op1@VMS00781 ~]$ sudo rabbitmqctl stop_app
Stopping node rabbit@VMS00781 …
[op1@VMS00781 ~]$ sudo rabbitmqctl reset
Resetting node rabbit@VMS00781 …

其次调整配置文件
[{rabbit,
  [{cluster_nodes, {[‘rabbit@VMS00781’, ‘rabbit@VMS00782’, ‘rabbit@vms00386’], disc}}]}].

之后启动各节点
[op1@VMS00781 ~]$ sudo service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

查看集群状态
[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status

几点注意:
无论通过命令行还是通过配置文件配置,请确保各节点上 Erlang 和 RabbitMQ 版本一致
配置文件仅对新鲜节点有效,也即被 reset 或者第一次启动的节点。因此在重启节点后自动化集群过程并不会发生。也以为这通过 rabbitmq 进行的改变优先于自动化集群配置。

在一台机器上部署集群,一般用户测试集群特性
这里的关键是已不同的端口可节点名称启动多个 rabbitmq-server 实例,其余过程同多机器上部署集群类似

其他注意事项:
如防火墙策略等

参考:
http://www.rabbitmq.com/clustering.html

RabbitMQ 概念及环境搭建(四)RabbitMQ High Availability

####################################################
RabbitMQ High Availability
####################################################
1. 高可用 queue
默认情况下 RabbitMQ cluster 中的 queues 位于单独的节点(queues 被首次声明的节点),而 exchanges 和 bindings 存在于 cluster 中各节点。因而每个节点失效 exchanges 和 bindings 并无影响,单弱 queues 所在的节点失效就会影响该节点上存在的 queues。但是。queues 可以在多个节点上镜像。每个被镜像的 queue 包含一个 master 和一个或者多个 slave。若原 master 失效则最旧的 slave 被提升为新的 master。

publish 到 queue 的 message 会被复制到各个 slave、consumers 无论从 cluster 中哪个节点连接都会连接到 master 上,对于已经自 master 上被确认的 message 各 slave 会丢弃。所以,queue 镜像只是增强了可用性。并没有在各节点间均衡负载。

该方案需要 RabbitMQ cluster,不能再 cluster 内处理 network partitions 因而不推荐在 WAN 中使用,仅用于 LAN。

2. 配置镜像
通过 policy 进行,可在任意时刻更改,将 non-mirrored queue 改为 mirrored queue,或者反之。需注意的是 non-mirrored queue 与没有 slave 的 mirrore 的 queue 并不相同,前者无需额外 mirroring 架构运行的更快。
可用的 policy
ha-mode  ha-params  行为
all                              queue 被 mirror 到 cluster 中所有节点。
                                cluster 中新添加节点,queue 也会被 mirror 到该节点。
exactly  count            queue 被 mirror 到指定数目的节点。
                                count 大于 cluster 中节点数则 queue 被 mirror 到所有节点。
                                若 count 小于 cluster 中节点数,在包含 mirror 的某节点 down 后不会在其他节点建新的 mirror(为避免 cluster 中 queue migrating)
nodes    node names  queue 被 mirror 到指定名字的节点。
                                若任一名称在 cluster 中不存在并不会引发错误。
                                若指定的任何节点在 queue 声明时都不在线则 queue 在被连接到的节点创建。

关于 nodes 类型的 policy
设置或更改 nodes 类型的 policy 可能引起原 master 迁移。比如原 master 没有出现的新的 lolicy 节点列表中时。RabbitMQ 采取的策略是保持原 master 直到至少一个新的 slave 已经同步,一旦同步后原 master 马上自动失效。原 consumer 连接会断掉,需重连。
如,原 queue 在节点{A,B},A 为 master。来一个新的 policy{C,D},会有一段时间的状态为{A,C,D},待 queue 同步后 A 上的 master 关闭,新的 mirror 为{C,D}

特殊 queue:Exclusivequeues
exclusive queues 不会被镜像(mirror)也不会被持久化(durable),即使被声明为如此。因为一但存放 queue 的节点 down 了上边的连接也会断掉,对于 exclusive queues 相关的 queue 会被马上删除。

3. 镜像配置示例(可通过多种方式)
下面的例子将“ha.”开头的 queue mirror 到 cluster 中所有节点
rabbitmqctl  rabbitmqctl set_policy ha-all “^ha\.” ‘{“ha-mode”:”all”}’
HTTP API    PUT /api/policies/%2f/ha-all {“pattern”:”^ha\.”, “definition”:{“ha-mode”:”all”}}
Web UI        Navigate to Admin > Policies > Add / update a policy.
                  Enter “ha-all” next to Name, “^ha\.” next to Pattern, and “ha-mode” = “all” in the first line next to Policy.
                  Click Add policy.

下面的例子将“two.”开头的 queue mirror 到 cluster 中两个节点,且自动同步
rabbitmqctl    rabbitmqctl set_policy ha-two “^two\.” ‘{“ha-mode”:”exactly”,”ha-params”:2,”ha-sync-mode”:”automatic”}’
HTTP API    PUT /api/policies/%2f/ha-two {“pattern”:”^two\.”, “definition”:{“ha-mode”:”exactly”, “ha-params”:2,”ha-sync-mode”:”automatic”}}
Web UI        Navigate to Admin > Policies > Add / update a policy.
                  Enter “ha-two” next to Name and “^two\.” next to Pattern.
                  Enter “ha-mode” = “exactly” in the first line next to Policy, then “ha-params” = 2 in the second line, then “ha-sync-mode” = “automatic” in the third, and set the type on the second line to “Number”.
                  Click Add policy.

下面的例子将“nodes.”开通的 queue mirror 到 cluster 中特定的 node
rabbitmqctl  rabbitmqctl set_policy ha-nodes “^nodes\.” ‘{“ha-mode”:”nodes”,”ha-params”:[“nodeA”, “nodeB”]}’
HTTP API    PUT /api/policies/%2f/ha-nodes {“pattern”:”^nodes\.”, “definition”:{“ha-mode”:”nodes”, “ha-params”:[“nodeA”, “nodeB”]}
Web UI        Navigate to Admin > Policies > Add / update a policy.
                  Enter “ha-nodes” next to Name and “^nodes\.” next to Pattern.
                  Enter “ha-mode” = “nodes” in the first line next to Policy, then “ha-params” in the second line, set the second line’s type to “List”, and then enter “nodeA” and “nodeB” in the sublist which appears.
                  Click Add policy.

4. 其他注意事项

参考:
http://www.rabbitmq.com/ha.html

RabbitMQ 概念及环境搭建(五)与 Web 的整合

####################################
rabbitmq_web_stomp
####################################
处于试验阶段,同伙 WebSocket 兼容层 SockJS 时 Web Browser 与 RabbitMQ(rabbitmq-stomp)实时通讯, 可用于实时的 WEB 应用
安装
sudo rabbitmq-plugins enable rabbitmq_web_stomp
测试
http://127.0.0.1:15674/stomp

使用

<script src=”http://cdn.sockjs.org/sockjs-0.3.min.js”></script>
<script src=”https://www.linuxidc.com/Linux/2014-12/stomp.js”></script>
<script>
    var ws = new SockJS(‘http://127.0.0.1:15674/stomp’);
    var client = Stomp.over(ws);
    […]
        […]
    var on_connect = function() {
        console.log(‘connected’);
    };
    var on_error =  function() {
        console.log(‘error’);
    };
    client.connect(‘guest’, ‘guest’, on_connect, on_error, ‘/’);
    […]

参考:
http://www.rabbitmq.com/web-stomp.html

RabbitMQ 的详细介绍:请点这里
RabbitMQ 的下载地址:请点这里

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计18793字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中