rocketmq 无法通过远程ip连接消费解决方法

本文解决了一个Java应用在虚拟机环境中无法消费RocketMQ消息的问题。通过正确的配置broker.properties文件并使用-c参数加载配置启动mqbroker服务,成功实现了消息的消费。

在学习研究中,通过java消费虚拟机中的rocketmq服务,通过虚拟机ip可以连接上,但是一直没法消费消息,也没有任何错误,在虚拟机中通过127.0.0.1又可以正常消费,以下是我的解决方法

1,进入rocketmq 目录

/usr/local/rocketmq-all-4.7.1/distribution/target/rocketmq-4.7.1/rocketmq-4.7.1

在这里插入图片描述
2,编写配置文件,并写好配置

echo "brokerIP1=192.168.2.196" > broker.properties

192.168.2.196 本机外网需要访问的ip地址

3,启动mqbroker,重点:一定要通过 -c 加载配置文件启动

nohup sh bin/mqbroker -n ${namesrvIp}:9876 -c /usr/local/rocketmq-all-4.7.1/distribution/target/rocketmq-4.7.1/rocketmq-4.7.1/broker.properties &
### 实现 RocketMQ 在线连接配置与使用的指南 为了实现 RocketMQ 的在线连接配置与使用,需要理解其基本架构和核心组件的工作原理。以下是关于如何配置和使用 RocketMQ 的详细说明。 #### 配置 RocketMQ 在线连接的关键步骤 1. **安装并启动 RocketMQ** 确保已经成功部署 RocketMQ 并启动 NameServer 和 Broker 服务。可以通过以下命令分别启动这两个服务: ```bash # 启动 NameServer sh bin/mqnamesrv # 启动 Broker sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true ``` 2. **修改默认端口(如果必要)** 如果需要更改 RocketMQ 默认的监听端口,则需编辑 `broker.conf` 和 `namesrv.conf` 文件[^1]。例如,默认情况下,NameServer 使用的是 9876 端口,而 Broker 则可能使用多个端口(如 10911)。可以在对应的配置文件中调整这些参数。 3. **设置远程访问权限** 若要允许其他机器上的应用连接RocketMQ,需确保防火墙已开放相应的端口,并在 `broker.conf` 中启用公网 IP 地址绑定。具体来说,可设置如下参数: ```properties listenAddress=your-public-ip:port brokerIP1=your-public-ip ``` 此外,还需确认网络环境支持跨网段通信。 4. **编写生产者代码** 下面是一个简单的 Java 生产者示例,用于向指定 Topic 发送消息: ```java import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.message.Message; public class Producer { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("producer_group"); producer.setNamesrvAddr("localhost:9876"); // 替换为实际地址 producer.start(); Message msg = new Message("TestTopic", "TagA", ("Hello RocketMQ").getBytes()); producer.send(msg); producer.shutdown(); } } ``` 5. **编写消费者代码** 对应于上述生产者的消费者逻辑如下所示: ```java import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.common.message.MessageExt; public class Consumer { public static void main(String[] args) throws Exception { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group"); consumer.setNamesrvAddr("localhost:9876"); // 替换为实际地址 consumer.subscribe("TestTopic", "*"); consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> { for (MessageExt msg : msgs) { System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), new String(msg.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; }); consumer.start(); } } ``` 6. **监控消息轨迹** 在线上环境中,建议开启消息轨迹功能以便追踪每条消息的状态变化过程。这有助于快速定位潜在问题并提升运维效率[^2]。 #### 注意事项 - 客户端 SDK 支持多种编程语言,但由于官方维护力度差异较大,部分语言可能存在版本滞后现象[^3]。 - 当大规模集群化部署时,务必规划好分区策略、副本数量及相关性能调优措施。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值