RocketMQ是阿里出的一个纯java的消息队列框架,其它的还有Kafka,Rabbitmq等,网上也有很多他们的对比,优缺点一目了然,国内可能RocketMQ使用居多,因为它抗住了全球最大的流量洪峰双十一,而且运行稳定!
GitHub:github.com/baiyuliang/…
下图为引用网上关于三者的对比情况图:
关于MQ的作用这里也不再讲了,自行Baidu,你会了解更多!如果你是安卓开发同学,那你就把他理解成EventBus吧,哈哈!
使用Docker安装RocketMQ:
你可以不使用docker,直接安装到linux服务器:Linux部署RocketMq,当然,这会相对麻烦一点!
首先,打开Xftp 6软件连接Linux服务器,在usr/local或者其它文件夹下,创建mq文件夹,再在mq文件夹下创建conf和data两个文件夹:
在conf文件夹下新建broker.conf文件,并编辑内容一下内容后保存:
1 | bash复制代码brokerClusterName = DefaultCluster |
brokerIP1为你本机的外网地址!
准备就绪后,开始安装:
1.下载:docker pull rocketmqinc/rocketmq
2.启动rocketmq:docker run -d -p 9876:9876 -v /usr/local/mq/data/namesrv/logs:/root/logs -v /usr/local/mq/data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq sh mqnamesrv
3.启动broker:docker run -d -p 10911:10911 -p 10909:10909 -v /usr/local/mq/data/broker/logs:/root/logs -v /usr/local/mq/data/broker/store:/root/store -v /usr/local/mq/conf/broker.conf:/opt/rocketmq/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq sh mqbroker autoCreateTopicEnable=true -c /opt/rocketmq/conf/broker.conf
4.安装控制台:docker pull styletang/rocketmq-console-ng
7.启动控制台:docker run -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=39.xxx.x.xx:9876 -Drocketmq.config.isVIPChannel=false" -p 8082:8080 -t styletang/rocketmq-console-ng
注意自己的外网ip地址不要写错,如果你更改了默认的端口映射,那么要注意你的端口保持一致!
浏览器打开:39.xxx.x.xx/8082
你可以在右侧选择中文语言,但到这里并不算成功,点击Cluster/集群:
出现broker-a,即你在broker.conf文件内声明的brokerName时,表明你的RockerMQ完全安装成功了!
整合进项目测试:
pom.xml引入:
1 | xml复制代码<!--消息框架rocketmq--> |
application.propertites中配置:
1 | xml复制代码spring.application.name=springboottest |
rocketmq的三大件:Producer,Consumer,MessageListener,分别进行配置:
MQProducerConfig:
1 | java复制代码package com.byl.springboottest.rocket; |
MQConsumerConfig:
1 | java复制代码package com.byl.springboottest.rocket; |
MQMsgListener:
1 | java复制代码package com.byl.springboottest.rocket; |
打开SpringboottestApplicationTests测试:
1 | java复制代码 @Resource |
运行testSendRocketMq方法:
具体返回内容:
1 | java复制代码SendResult [sendStatus=SEND_OK, msgId=C0A801184D2818B4AAC27A4996310000, offsetMsgId=2769096000002A9F0000000000000347, messageQueue=MessageQueue [topic=ConsumerTopic, brokerName=broker-a, queueId=2], queueOffset=0] |
打开rocketmq控制台:
注意,经测试,在消费者订阅主题时:
1 | java复制代码subscribe(String topic, String subExpression) |
第二个参数,也就是发送消息时设置的Tag,必须指定,如:
1 | java复制代码consumer.subscribe("MyTopic", "MyTag"); |
或
1 | java复制代码consumer.subscribe("MyTopic", "MyTag||MyTag2"); |
如果设为consumer.subscribe(“MyTopic”, “*“)会导致无法收到消息!
本文转载自: 掘金