首先在阿里云的控制面板上配好各个参数,然后一段简单的测试代码:
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