Rocketmq踩坑合集

生产者无法发送消息

Rocketmq踩坑_外网

我的broker,namesrv中都没有配置10909这个端口,其实10909是vip通道,Producer应该指定关闭vip通道连接

示例:

//1.创建消息生产者producer,并指定生产者组名
        DefaultMQProducer producer = new DefaultMQProducer("group1");
        //2.指定namesrv地址
        producer.setNamesrvAddr("47.98.47.1:9876");
		//关闭vip通道
        producer.setVipChannelEnabled(false);
        //3.启动producer
        producer.start();
        //4.创建消息对象,指定主题Topic,Tag和消息体
        for (int i = 0; i < 10; i++) {
            /**
             * 参数一:消息主题Topic
             * 参数二:消息Tag
             * 参数三:消息内容
             */
            Message msg = new Message("base", "tag1", ("Hello World" + i).getBytes());
            //5.发送消息
            SendResult result = producer.send(msg, 100000);
            //发送状态
            SendStatus status = result.getSendStatus();
            //消息id
            String msgId = result.getMsgId();
            //消息队列id
            int queueId = result.getMessageQueue().getQueueId();
            System.out.println("发送状态:"+result+",消息id:"+msgId+",队列"+queueId);

            TimeUnit.SECONDS.sleep(1);
        }
        //6.关闭生产者producer
        producer.shutdown();

解决之后又出现无法连接broker

Rocketmq踩坑_i++_02

原因出在broker的启动配置文件上

正确示例:

# brokerIp地址,注意拼写,IP是大写,单机broker集群分别配置brokerIP1、brokerIP2、brokerIP3
brokerIP1={外网ip}
# 集群名称
brokerClusterName=DefaultCluster
# 同一组(主机从机)名字需一样
brokerName=broker-a
# 主机为0,从机非0
brokerId=0
deleteWhen=04
fileReservedTime=48
# 角色,主机SYNC_MASTER,从机SLAVE
brokerRole=SYNC_MASTER
# 主从消息存盘机制,这里是异步
flushDiskType=ASYNC_FLUSH
# 监听端口,不可重复
listenPort=10911
# 消息存储路径,单机集群broker,不可重复
storePathRootDir=/rocketmqStore/a-m
namesrvAddr={外网ip}:9876

这里主要的需要注意的就是namesrvAddr、storePathRootDir、brokerIP1

最后还需要注意的是rocketmq-client依赖,需要保持和服务器rocketmq版本一致才可以连接