为什么选择RocketMQ | RocketMQ (apache.org)
RocketMQ主要由Producer、Broker、Consumer三部分组成,其中Producer负责生产消息,Consumer负责消费消息,Broker负责存储消息。Broker在实际部署过程中对应一台服务器,每个Broker可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的Broker。
简介
Rocketmq消息中间件
应用场景:双十一秒杀等高并发,服务器不能一次性处理特别多消息,需要削峰
RocketMQ入门学习:(1) RocketMQ常见应用场景_rocketmq中什么场景下需要用到集群消费什么场景下用广播消费-优快云博客
Rocket有服务端和客户端
Pom文件里面引入客户端
电脑上面下载服务端
注意版本号要一样,不然会报错
服务端的运行
打开bin目录,
在此目录下面打开两个cmd窗口,分别输入
Mqnamesrv
和
mqbroker -n localhost:9876 autoCreateTopicEnable=true
图形界面
推荐大家下载一个dashboard,编译之后找到对应文件夹,输入
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar命令运行
运行成功后在浏览器输入
http://127.0.0.1:8080/#/
发送消息
可能会出现的错误
解析:broker所在磁盘(我把rocketmq服务端安装在C盘的)占用大于90%,程序报错
修改:把磁盘文件清理一些就可以正常运行了
代码解析
Consumer
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test_consumer");
新建了两个群组ID是test_consumer的consumer
consumer.setNamesrvAddr("localhost:9876");
consumer.subscribe("test", "*");
连接到nameserver :localhost:9876
订阅话题 test
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
list.forEach(System.out::println);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
接受到消息后打印消息并返回成功
Producer
// 实例化消息生产者Producer
DefaultMQProducer producer = new DefaultMQProducer("test_producer");
// 设置NameServer的地址
producer.setNamesrvAddr("127.0.0.1:9876");
// 启动Producer实例
producer.start();
for(int i = 0; i < 10; i++) {
// 创建消息,并指定Topic,Tag和消息体
Message msg = new Message("test", "test", ("Hello RocketMQ"+i).getBytes());
// 发送消息到一个Broker
SendResult sendResult= producer.send(msg);
// 通过sendResult返回消息是否成功送达
System.out.printf("%s%n", sendResult);
}
producer.shutdown();
运行结果
两个consumer都可以收到producer发送的信息