首页 > 系统相关 >Windows下RabbitMQ 集群及应用测试

Windows下RabbitMQ 集群及应用测试

时间:2023-11-23 09:45:17浏览次数:31  
标签:node Windows RabbitMQ cluster rabbitmqctl 集群 节点

 

转自:https://blog.csdn.net/elie_yang/article/details/86657851

1:安装erlang环境;

 

2:安装RabbitMQ, 以上2步都是下载安装,下一步结束;参考官网:http://www.rabbitmq.com/install-windows.html

 

步骤2完成后,可至windows服务列表中找到RabbitMQ服务;

 

3:删除默认guest 用户,添加管理员用户;

 

开启RabbitMQ命令行工具:rabbitmqctl delete_user guest;  注意是rabbitmqctl 中的结尾是ctl 不是ctrl

 

rabbitmqctl add_user janeway changeit

 

rabbitmqctl set_user_tags janeway administrator

 

rabbitmqctl set_permissions -p /vhost janeway “^janeway-.*” “.*” “.*”

 

注意上面是双引号,单引号会导致访问拒绝ACCESS_REFUSED

 

4: 如果使用阿里云服务器,开通tcp 5672端口;

 

5:重复上面步骤在另外一台服务器上安装rabbitMq实例;

 

6:分别在上述服务器中找到:C:\Windows\System32\drivers\etc 下的hosts文件,配置好两台服务器之间的互相访问:

 

例如:172.18.3.243 nodeServerA 保存后在cmd 中ping nodeServerA看是否生效;

 

7:复制.erlang.cookie文件到另外一台服务器,位置:C:\Users\Administrator,保持服务器之间的cookie一致;不一致 错误见下图

 

 

 

 

替换C:\Windows\system32\config\systemprofile 下的erlang.cookie文件,保持一致,重启服务;

 

8:在将要集群的主机中继续执行 rabbitmqctl stop_app;

 

9:rabbitmqctl join_cluster rabbit@HostNamexxx...(填写服务器名)

 

 

 

 

10: rabbitmqctl start_app;开启应用,非节点服务

 

11:rabbitmqctl cluster_status;查看集群状态,disc:为磁盘节点,ram:为内存节点;

 

 

 

 转自:https://blog.csdn.net/elie_yang/article/details/86657851

集群后,用户、队列什么的都同步过来了,验证下:rabbtimqctl list_users; rabbbitmqctl list_queues;

 

12:实验1:关闭disc类型的节点,用客户端直接连接ram节点:

 

当客户端程序QueueDeclare时报错:home node 'rabbit@HgwebHost' of durable queue 'xxx' in vhost '/' is down or inaccessible;

 

实验2:退出集群后在各自的RabbitMQ节点中创建同一个名称的非持久化队列会是什么情形呢?

 

首先退出集群:

 

在rabbitmq2上执行

 

#rabbitmqctl stop_app

 

#rabbitmqctl reset

 

#rabbitmqctl start_app

 

在集群主节点上执行

 

# rabbitmqctl forget_cluster_node rabbit@rabbitmq2

 

在这里碰见的一个异常为:rabbitmq thinks it's clustered with node rabbit@xx-nodeName, but rabbit@xx_node2 disagrees.

 

解决办法是搜索mnesia文件夹:找到例如:C:\Users\Administrator\AppData\Roaming\RabbitMQ\db\rabbit@iZmt2xpetxp62fZ-mnesia 然后删除cluster_nodes.config文件;

 

创建一个同名队列,重复步骤8,9  实验结果:join_cluster 后,刚才建立的队列不可见;

 

13:改变节点的集群属性:验证一个集群中至少有一个磁盘节点:

 

#rabbitmqctl stop_app

 

#rabbitmqctl change_cluster_node_type disc/ram –更改节点为磁盘或内存节点

 

#rabbitmqctl start_app

 

14:以上一个普通的集群就完成了,RabbitClient.Net 代码中:

 

var amqpList = new List<AmqpTcpEndpoint>

{

    new AmqpTcpEndpoint(new Uri("amqp://192.168.0.105:5672")),

    new AmqpTcpEndpoint(new Uri("amqp://192.168.0.107:5672"))

};

 

var factory = new ConnectionFactory()

                {          

                UserName = userName,

                Password = password,

                RequestedHeartbeat = heartbeat, //心跳超时时间

                TopologyRecoveryEnabled = true,

                AutomaticRecoveryEnabled = true //自动重连

            };

 

factory.CreateConnection(amqpList);

 

可以实现简单的客户端负载均衡;

 

官网中集群对客户端的意义中写道:

 

Assuming all cluster members are available, a client can connect to any node and perform any operation. Nodes will route operations to the queue master node transparently to clients.

 

With all supported messaging protocols a client is only connected to one node at a time.

 

In case of a node failure, clients should be able to reconnect to a different node, recover their topology and continue operation. For this reason, most client libraries accept a list of endpoints (hostnames or IP addresses) as a connection option. The list of hosts will be used during initial connection as well as connection recovery, if the client supports it. See documentation guides for individual clients to learn more.

 

There are scenarios where it may not be possible for a client to transparently continue operations after connecting to a different node. They usually involve non-mirrored queues hosted on a failed node.

 

15:HAProxy 安装,负载均衡使用;

 

haproxy.exe -f haproxy.cfg -D 后台运行;

 

taskkill /IM haproxy.exe /F 关闭haproxy;

 

 

 

 

16: 客户端检测AlreadyClosedException异常重连接入MQ节点;

 

17:自己写的一个消息队列应用测试:

 

 

 

 

 总结:主要解决了MQ服务器宕机或服务重启不影响客户端数据采集,可扩展单台MQ服务器连接瓶颈。

 

搜索

复制

标签:node,Windows,RabbitMQ,cluster,rabbitmqctl,集群,节点
From: https://www.cnblogs.com/furenjian/p/17850865.html

相关文章

  • haproxy+nginx实现web负载均衡集群:
    haproxy+nginx实现web负载均衡集群: 主机|系统|IP地址|主要软件|—|—|—|—|—Haproxy服务器|CentOS7.9X86_64|192.168.8.101|haproxy-1.5.19.tar.gzNginx服务器1|CentOS7.9X86_64|192.168.8.200|nginx-1.12.0.tar.gzNginx服务器2|CentOS7.9X86_64|192.168.8.20......
  • Windows平台Unity下实现camera场景推送RTMP|轻量级RTSP服务|实时录像
    技术背景我们在对接Unity平台camera场景采集的时候,除了常规的RTMP推送、录像外,还有一些开发者,需要能实现轻量级RTSP服务,对外提供个拉流的RTSPURL。目前我们在Windows平台Unity下数据源可采集到以下部分:采集Unitycamera场景;采集摄像头;采集屏幕;采集Unity声音;采集麦克风;采集扬声器;Un......
  • Win11 SQL Server 安装程序无法通过 Windows Update 服务搜索更新。
    SQLServer安装提示安装程序无法通过windowsupdate服务搜索更新SQLServer安装提示安装程序无法通过windowsupdate服务搜索更新_sqlserver安装程序无法通过windowsupdate-CSDN博客解决方法:手动创建DefaultSetup.ini放置到安装程序文件夹里的x64或者x86目录中,如果De......
  • Windows下mDNS查询API—DnsStartMulticastQuery/DnsStopMulticastQuery的使用
    背景及问题:目前很多局域网设备通过mNDS协议实现互联,IP地址为自动IP段-169.254.x.x,有时候设备厂家提供的API需要通过知晓局域网中的IP地址/设备名,才能连接该设备。这样要求每个软件必须配置设备名或者启动时遍历所有IP(6w+),不是很方便,这时候可以通过mDNS查询,自动拿到设备名,再进行连......
  • windows 文件授权问题
    跨平台可执行权限介绍在类Unix系统(如Mac,Linux)中,执行权限是通过文件的权限位来控制的。而在Windows系统中,执行权限通常取决于文件扩展名和关联的执行程序,所以,当我们在跨平台的开发环境中,可能会遇到这样一个问题:在Windows系统上创建的脚本文件缺乏类Unix系统上的执行权......
  • Windows7下ELectron应用的Input输入框在拼音输入中的失焦问题?
    Windows7下ELectron应用的Input输入框在拼音输入中的失焦问题主要是为了解决虚拟键盘(使用的simple-keyboard)的拼音输入问题(Windows自带的虚拟键盘因为不够方便和美观,所以没有采用;simple-keyboard其实也支持拼音输入,但是更不好用),最后决定通过Koffi(ffi,ffi-napi)调用user32.dll,模拟......
  • C/C++ 实现Windows注册表操作
    Windows注册表(Registry)是Windows操作系统中用于存储系统配置信息、用户设置和应用程序数据的一个集中式数据库。它是一个层次结构的数据库,由键(Key)和值(Value)组成,这些键和值被用于存储各种系统和应用程序的配置信息。以下是注册表的一些基本概念:键(Key):注册表中的数据结构,类似于文......
  • windows安装QT时出现“无法下载存档……”解决办法
    参考windows、Ubuntu安装QT时经常出现“无法下载存档……”解决办法-CSDN博客使用国内源安装:清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/北京理工大学:http://mirror.bit.edu.cn/qtproject/中国互联网络信息中心:http://mirror.bit.edu.cn/qtproject/步骤:在qt的exe......
  • 更改Windows的远程桌面端口
    摘自:https://cloud.tencent.com/developer/article/1557774方法一:工具下载地址:https://pan.baidu.com/s/1Rt3ZFXY0sOD5okeb9VI3_A方法二:命令1.执行以下命令(将以下所有的36970更为新的要更改的端口后再执行):regadd"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control......
  • Docker Swarm动态扩容MINIO集群
    需求背景当一个minio集群的磁盘不够用的时候,可以有两种方式,第一个通过扩磁盘,第二种增加机器。但是不管是哪种方式,都不能去动原来集群的启动方式,那样集群就起不来了,会一直提示类似下面这种报错,ERRORUnabletoinitializebackend:/data1driveisalreadybeingusedinanother......