前言
近期项目中需要RocketMQ,决定接入阿里云的,因此记录一下使用过程。
链接
购买(略过,同事选配,买的是按量付费)
买完进入后就都是0
使用
上面是创建的实例是华东1的实例
若要创建公网实例,按如下切换后再创建(区别下面再讲)
点击详情即可操作该实例
若是按量付费,实例不用了记得删除,创建实例每天也是要钱的
接入方式分为TCP接入和HTTP接入
有一个URL参数不同,分别对应实例详情中的TCP接入点和HTTP接入点提供的URL
其次就是SDK复杂度,经测试,HTTP的SDK要复杂的多
如果你注册的是区域实例,那么是没有TCP公网链接(如下)
公网:即你在自己的机器上也可以接入这个链接测试
内网:如果你的应用服务器和RocketMQ的实例在一个区域,那么在服务器上,你可以通过内网链接调用
1、官方demo
2、这里以内部的springboot项目示例
3、修改配置文件内容
4、注意:nameSrv要是公网能访问的且是TCP接入点,因为是在自己的机器
5、测试用例中有很多demo,如下(注意测试就发一条就行了,循环里记得break一下,因为我是按量付费)
6、消费者直接跑上面的COnsumerTestTest即可
1、官方demo
2、我测试的话主要用的类就是里面的MQClient
public class ClientTest {
private final static String INSTANCE_ID = "";
private final static String TOPIC_NAME = "";
private final static String ENDPOINT = "";
private final static String ACCESS_KEY_ID = "";
private final static String ACCESS_KEY_SECRET = "";
public static void main(String[] args) {
MQClient mqClient = new MQClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
MQProducer producer = mqClient.getProducer(INSTANCE_ID, TOPIC_NAME);
producer.publishMessage(new TopicMessage("发送的消息".getBytes()));
MQConsumer consumer = mqClient.getConsumer(INSTANCE_ID, TOPIC_NAME, TOPIC_NAME, "test");
List<Message> messages = consumer.consumeMessage(1, 0);
// TODO 这里好像是需要像服务器响应一下,否则消息还是未消费状态,但是我没搞懂......
}
}
3、然后你就可以用了
两者给我的感觉就是HTTP接入需要很多类,而TCP接入只需要引入一个jar,然后按着demo搞即可,方便些
小结
以上就是这次接入RocketMQ的一些经历,一开始是没搞懂内网和公网的区别所以有些懵逼,不过后面懂了其实就还行
感觉很多东西都封装好了,一般开发的话就保证常见的MQ问题不要出现即可
注意
原因:如果开发、生产环境发消息时各个参数都一样,这样就相当于一个集群,MQ投递消息的时候就会随机发到一个实例中,导致好像消息丢失
解决:让开发、生产环境订阅不同的topic、tag等,或者用两个实例