阿里云MQ服务报错:No route info of this topic

本文记录了在使用阿里云RocketMQ过程中遇到的发送消息失败问题,并最终定位为公司防火墙拦截TCP连接导致的问题。

        首先在阿里云的控制面板上配好各个参数,然后一段简单的测试代码:

package com.aliyun.openservices.tcp.heaven.producer;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.aliyun.openservices.ons.api.SendResult;
import com.aliyun.openservices.ons.api.ONSFactory;
import com.aliyun.openservices.ons.api.PropertyKeyConst;
import com.aliyun.openservices.tcp.heaven.MqConfig;

import java.util.Date;
import java.util.Properties;

public class ProducerTest {
    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.ProducerId, MqConfig.PRODUCER_ID);
        properties.put(PropertyKeyConst.AccessKey, MqConfig.ACCESS_KEY);
        properties.put(PropertyKeyConst.SecretKey, MqConfig.SECRET_KEY);
        properties.setProperty(PropertyKeyConst.SendMsgTimeoutMillis, "6000");
        properties.put(PropertyKeyConst.ONSAddr,MqConfig.ONSADDR);

        Producer producer = ONSFactory.createProducer(properties);
        producer.start();

        String messageStr = "Hello MQ I'am J-HEAVEN";
        for (int i = 0; i < 100; i++){
            Message msg = new Message(MqConfig.TOPIC, MqConfig.TAG, messageStr.getBytes());
            msg.setKey("ORDERID_" + i);

            try {
                SendResult sendResult = producer.send(msg);
                if (sendResult != null) {
                    System.out.println(new Date() + " Send mq message success. Topic is:" + msg.getTopic() + " msgId is: " + sendResult.getMessageId());
                }
            } catch (Exception e) {
                System.out.println(new Date() + " Send mq message failed. Topic is:" + msg.getTopic());
                e.printStackTrace();
            }
        }

        producer.shutdown();
    }
}

        MqConfig是一个存放参数变量的类,不给出了。

        然后。。。。运行。。。。

    ??????????????报错了????????????????

        查看log文件,挑几个重点拿出来:

2018-07-23 16:43:22,022 WARN RocketmqClient - updateTopicRouteInfoFromNameServer Exception
com.aliyun.openservices.shade.com.alibaba.rocketmq.remoting.exception.RemotingTimeoutException: wait response on the channel <112.124.141.191:80> timeout, 3000(ms)
	at .............................

2018-07-23 16:43:22,022 ERROR RocketmqClient - Send message Exception, Message [topic=heaven-mq-test, systemProperties={__KEY=ORDERID_0, __TAG=TEST-TAG}, userProperties=null, body=22]
com.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, heaven-mq-test
See http://rocketmq.apache.org/docs/faq/ for further details.
	at ................................

        一眼就看到了它:MQClientException: No route info of this topic, heaven-mq-test

        然后就是各种折腾,网上也没太多相关的信息,大多都是关于自建RocketMQ出现的无法自动 create Topic 的问题,搜到了两个类似的问题,但是都没有人给出正确的解答,都是范范的回答了一下。

        然后就是一顿翻文档,翻来覆去也没什么收获,就几个名称怎么可能出错,一路从TOPIC.CONSUMER.PRODUCER折腾到accessKey,差点就想向阿里云提个工单了。。。。。。

        没戏  =_=  !!!!!????

        慢着!停!上面还有个错来着。。。

com.aliyun.openservices.shade.com.alibaba.rocketmq.remoting.exception.RemotingTimeoutException: 
wait response on the channel <112.124.141.191:80> timeout, 3000(ms)

 

       礼貌微笑

        试了一下百度,能上。难道?公司的防火墙?我直接访问了MQ的地址:

        http://onsaddr-internet.aliyun.com/rocketmq/nsaddr4client-internet

        没问题啊。。。。。。。。。。。。。。

        难道?不会是???

     断开公司的网络(把冰箱门打开),打开手机热点(把大象放进去),连上热点(把冰箱门带上)。

     运行:

Mon Jul 23 17:01:35 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF13A418B4AAC274F331650000
Mon Jul 23 17:01:35 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF13A418B4AAC274F332690002
Mon Jul 23 17:01:35 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF13A418B4AAC274F332A00004

Process finished with exit code 0

        应该是我们公司的防火墙拦截了的TCP协议。

        礼貌微笑

 

 

=========================================附上简易代码===========================================

package com.aliyun.openservices.tcp.heaven.producer;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.aliyun.openservices.ons.api.SendResult;
import com.aliyun.openservices.ons.api.ONSFactory;
import com.aliyun.openservices.ons.api.PropertyKeyConst;
import com.aliyun.openservices.tcp.heaven.MqConfig;

import java.util.Date;
import java.util.Properties;

/**
 * 生成普通消息
 * @author jiangyqc
 * 2018年7月24日 09:59:20
 */
public class ProducerTest {
    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.ProducerId, MqConfig.PRODUCER_ID);
        properties.put(PropertyKeyConst.AccessKey, MqConfig.ACCESS_KEY);
        properties.put(PropertyKeyConst.SecretKey, MqConfig.SECRET_KEY);
        properties.setProperty(PropertyKeyConst.SendMsgTimeoutMillis, "3000");
        properties.put(PropertyKeyConst.ONSAddr,MqConfig.ONSADDR);

        Producer producer = ONSFactory.createProducer(properties);
        producer.start();

        String messageStr = "Hello MQ I'am J-HEAVEN";

        for (int i = 0; i < 10; i++){
            Message msg = new Message(MqConfig.TOPIC, MqConfig.TAG, messageStr.getBytes());
            msg.setKey("ORDERID_" + i);

            try {
                SendResult sendResult = producer.send(msg);
                if (sendResult != null) {
                    System.out.println(new Date() + " Send mq message success. Topic is:" + msg.getTopic() + " msgId is: " + sendResult.getMessageId());
                }
            } catch (Exception e) {
                System.out.println(new Date() + " Send mq message failed. Topic is:" + msg.getTopic());
                e.printStackTrace();
            }
        }

        producer.shutdown();
    }
}

Tue Jul 24 09:56:15 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC2789427620000
Tue Jul 24 09:56:15 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC2789427EB0002
Tue Jul 24 09:56:15 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC2789428680005
Tue Jul 24 09:56:15 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC2789428970008
Tue Jul 24 09:56:15 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC2789428D5000B
Tue Jul 24 09:56:15 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC278942904000E
Tue Jul 24 09:56:15 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC2789429420011
Tue Jul 24 09:56:15 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC2789429910014
Tue Jul 24 09:56:16 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC2789429C00017
Tue Jul 24 09:56:16 CST 2018 Send mq message success. Topic is:heaven-mq-test msgId is: C0A82BDF39E018B4AAC278942A0D001A

Process finished with exit code 0
package com.aliyun.openservices.tcp.heaven.consumer;

import com.aliyun.openservices.ons.api.Action;
import com.aliyun.openservices.ons.api.ConsumeContext;
import com.aliyun.openservices.ons.api.Consumer;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.MessageListener;
import com.aliyun.openservices.ons.api.ONSFactory;
import com.aliyun.openservices.ons.api.PropertyKeyConst;
import com.aliyun.openservices.tcp.heaven.MqConfig;
/**
 * 消费普通消息
 * @author jiangyuqin
 * 2018年7月24日 09:59:37
 */
import java.util.Properties;
public class ConsumerTest {
    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.ConsumerId, MqConfig.CONSUMER_ID);
        properties.put(PropertyKeyConst.AccessKey, MqConfig.ACCESS_KEY);
        properties.put(PropertyKeyConst.SecretKey, MqConfig.SECRET_KEY);
        properties.put(PropertyKeyConst.ONSAddr, MqConfig.ONSADDR);
        // 集群订阅方式 (默认)
        // properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING);
        // 广播订阅方式
        // properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING);
        Consumer consumer = ONSFactory.createConsumer(properties);
        consumer.subscribe(MqConfig.TOPIC, MqConfig.TAG, new MessageListener() { //订阅多个 Tag
            public Action consume(Message message, ConsumeContext context) {
                System.out.println("Receive: " + new String(message.getBody()));
                return Action.CommitMessage;
            }
        });
        consumer.start();
        System.out.println("Consumer Started");
    }
}
Consumer Started
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN
Receive: Hello MQ I'am J-HEAVEN

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值