ActiveMQ +Zookeeper搭建集群实现高可用

环境信息

  • Java17
  • CentOS 7.9
  • Apache Zookeeper-3.5.7
  • Apache Activemq-5.15.9
服务器编号服务器IP主机名称系统
1192.168.100.110host110CentOS 7.9
2192.168.100.111host111CentOS 7.9
3192.168.100.112host112CentOS 7.9

Zookeeper集群搭建

服务器编号服务器IPLF通信端口LF选举端口客户端端口
1192.168.100.110288838882180
2192.168.100.111288838882180
3192.168.100.112288838882180

Zookeeper集群不在本文中配置,默认已配置完毕

搭建ActiveMQ集群

服务器编号服务器IPActiveMQ后台端口ActiveMQ管理控制台端口
1192.168.100.110616168161
2192.168.100.111616168161
3192.168.100.112616168161

启动Linux服务器
分别在三台Linux服务器中创建集群目录

mkdir /opt/activemq/cluster_node

将ActiveMQ安装目录解压到集群目录中
apache-activemq-5.15.9-bin.tar.gz

cp yourPath/apache-activemq-5.15.9-bin.tar.gz /opt/activemq/cluster_node
tar -zxvf apache-activemq-5.15.9-bin.tar.gz

修改ActiveMQ配置文件

配置持久化器

使用LevelDB替换默认KahaDB配置
将一下默认配置注释

<persistenceAdapter>
       <kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

加入LevelDB配置

    <persistenceAdapter>
         <replicatedLevelDB
             directory="${activemq.data}/leveldb"
             replicas="3"
             bind="tcp://0.0.0.0:62621"
             zkAddress="192.168.100.110:2181,192.168.100.111:2181,192.168.100.112:2181"
             hostname="host110"
             zkPath="/activemq/leveldb-stores"/>
    </persistenceAdapter>

参数说明:

配置项说明
directory持久化数据存放位置(会在${activemq.data}/中创建leveldb目录)
replicas集群中节点个数(由于是三台服务器搭建集群,所以设置为3)
bind集群通信端口
zkAddressZookeeper集群地址
hostname主机名称 (使用本机IP或主机名称,如果使用主机名称一定在hosts文件中配置IP映射)
zkPathZookeeper数据挂载点(启动后会在Zookeeper下注册此节点)

此配置在拷贝到三台设备时需修改hostname为各自的主机名称或IP

配置BrokerName

集群中三台服务器的brokerName一定要一致

在activemq.xml配置文件中修改以下节点

<!--
    The <broker> element is used to configure the ActiveMQ broker.
-->
  <broker xmlns="http://activemq.apache.org/schema/core" brokerName="mqCluster" dataDirectory="${activemq.data}">

将brokerName修改为你自定义名称

将此配置同步拷贝到三台服务器配置中

主机名映射配置

如果配置持久化器时hostname选用为主机名称则需要在三台服务器的hosts文件中配置相互之间的主机名称映射

以本案例为例:

hostname="host110"

hostname分别为host110,host111,host112(见开头环境信息)
需要配置hosts的IP到主机名映射以便集群中主机相互通信

向hosts文件中添加信息:

vim /etc/hosts

在文件末尾如下信息(根据你的配置来):

192.168.100.110 host110
192.168.100.111 host111
192.168.100.112 host112

三台服务器都要这样设置

启动

启动Zookeeper集群

分别在三台服务器上启动Zookeeper

启动ActiveMQ集群

分别在三台服务器上启动ActiveMQ

cd /opt/activemq/cluster_node/apache-activemq-5.15.9-bin/bin/
activemq start

访问

登录Zookeeper查看哪台主机被选举为了master

>zkCli.sh -server host110
>ls /activemq/leveldb-stores # 查看集群当前在线的ActiveMQ节点
[00000000023, 00000000024, 00000000025] # 在线的三个MQ节点
>get /activemq/leveldb-stores/00000000023 # 查看节点信息
{"id":"mqCluster","container":null,"address":"tcp://host110:62621","position":-1,"weight":1,"elected":"0000000023"}
>get /activemq/leveldb-stores/00000000024
{"id":"mqCluster","container":null,"address":null,"position":-1,"weight":1,"elected":null}
>get /activemq/leveldb-stores/00000000025
{"id":"mqCluster","container":null,"address":null,"position":-1,"weight":1,"elected":null}

通过elected得出选举出的主机为host110
浏览器访问host110:8161即可查看集群参数

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您简单介绍一下SpringBoot集成ActiveMQ和MQTT实现消息的发送和接收。 首先,您需要在SpringBoot项目中添加ActiveMQ和MQTT的依赖,可以在pom.xml文件中添加如下代码: ```xml <!-- ActiveMQ --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> <!-- MQTT --> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> <version>5.5.0</version> </dependency> ``` 接下来,您需要在application.properties中配置ActiveMQ和MQTT的连接信息,例如: ```properties # ActiveMQ spring.activemq.broker-url=tcp://localhost:61616 spring.activemq.user=admin spring.activemq.password=admin # MQTT spring.mqtt.username=admin spring.mqtt.password=admin spring.mqtt.url=tcp://localhost:1883 ``` 然后,您可以通过注入JmsTemplate和MqttPahoMessageHandler来实现消息的发送和接收。例如: ```java // ActiveMQ @Autowired private JmsTemplate jmsTemplate; public void sendMessage(String destination, String message) { jmsTemplate.convertAndSend(destination, message); } @JmsListener(destination = "testQueue") public void receiveMessage(String message) { System.out.println("Received message: " + message); } // MQTT @Autowired private MqttPahoMessageHandler mqttHandler; public void sendMessage(String topic, String message) { mqttHandler.setDefaultTopic(topic); mqttHandler.handleMessage(MessageBuilder.withPayload(message).build()); } @MessageEndpoint public class MqttMessageReceiver { @ServiceActivator(inputChannel = "mqttInputChannel") public void receiveMessage(String message) { System.out.println("Received message: " + message); } } ``` 以上代码中,sendMessage方法用于发送消息,receiveMessage方法用于接收消息。使用JmsTemplate可以很方便地发送和接收ActiveMQ消息,使用MqttPahoMessageHandler和MqttMessageReceiver可以很方便地发送和接收MQTT消息。 这就是SpringBoot集成ActiveMQ和MQTT实现消息发送和接收的基本流程,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA小菜鸡223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值