一个码农初次学习消息中间件的经历
常见消息中间件-第一节
- activeMQ
- RabbitMQ
- RocketMQ
- kafka
以下为三者的比较:
activeMQ的学习
官网 : http://activemq.apache.org/ 下载最新版
第一种启动
进入bin ,
根据需求选择,我的是64位,所以进去win64目录下,找到activemq.bat 启动
进入浏览器 http://127.0.0.1:8161
用户名密码默认为admin
第二种以服务启动
InstallService.bat以管理员身份运行
服务中有ActiveMQ
linux
解压压缩包
进入bin 输入 activemq start,启动完成
RocketMQ的学习
- Windows下安装RocketMQ
- 官方下载地址:http://rocketmq.apache.org/dowloading/releases/
这是目前最新版,其中红色为源码,蓝色为安装工具,下载蓝色所示的压缩包,并解压当本地安装路径 - 系统环境变量配置
变量名:ROCKETMQ_HOME
变量值:MQ解压路径\MQ文件夹名 - 启动
先启动NAMESERVER
cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqnamesrv.cmd’,启动NAMESERVER。成功后会弹出提示框,此框勿关闭
然后启动BROKER
cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true’,启动BROKER。成功后会弹出提示框,此框勿关闭。 - 关闭命令
.\mqshutdown namesrv
.\mqshutdown broker
- 本地练习RocketMQ所遇到的问题及解决办法
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
/**
* 发送消息
* Created by on 2019/1/17.
*/
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
//rocketmq的创建producer很简单只输入一个Group Name名字就可以,不向activemq那么复杂
DefaultMQProducer producer = new DefaultMQProducer("pay_topic_01");
//Name Server的地址,这里注意两点,一个就是nameserver的默认端口是9876,另一个就是多个nameserver集群用分号来分割
producer.setNamesrvAddr("127.0.0.1:9876");
producer.start();
for (int i = 0; i < 2; i++) {
try {
//消息创建也很简单,第一个参数是topic,第二个就是tags(多个tag用||连接),第三个参宿是消息内容
Message msg = new Message("TopicTest",// topic
"TagA",// tag
("Hello RocketMQ " + i).getBytes()// body
);
//调用send方法就能发送成功了,不用像actimemq那样需要commit
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
}
catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
producer.shutdown();
}
}
执行后报错,如下:
org.apache.rocketmq.client.exception.MQClientException: No route info of this topic
解决办法:将依赖版本修改为本地安装版本,之后运行就会成功。
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.3</version>
</dependency>
运行结果如下:
SendResult [sendStatus=SEND_OK, msgId=C0A82FF1354858644D46560855F60000, offsetMsgId=C0A82FF100002A9F00000000000000B2, messageQueue=MessageQueue [topic=TopicTest, brokerName=houxia, queueId=2], queueOffset=0]
SendResult [sendStatus=SEND_OK, msgId=C0A82FF1354858644D46560856EC0001, offsetMsgId=C0A82FF100002A9F0000000000000164, messageQueue=MessageQueue [topic=TopicTest, brokerName=houxia, queueId=3], queueOffset=0]
个人发现个奇怪的事情,运行成功后将依赖修改为其他版本也可运行成功,原因目前未知。
将个人经历分享给大家,谢谢!