什么是RocketMQ
一款由阿里巴巴集团开发,对付双11削峰填谷的消息中间件。
RocketMQ的构成
1.NameServer
一个注册中心,需要比Broker先启动,具有以下作用:
Broker定时向它打报告,注册自己
生产者会从它这打听Broker的地址
消费者会从它这打听Broker的地址
2.Broker
负责消息的存储与转发工作
3.生产者
负责生产消息
4.消费者
负责消费消息
RocketMQ的运转流程
1.NameServer启动
2.Broker启动,并向NamerServer注册自己
3.生产者从NameServer打听Broker的地址,生产者根据地址向Broker发送某个主题(Topic)的消息
4.消费者从NameServer打听Broker的地址,找到Broker,根据自己感兴趣的主题(Topic)那里拿取到消息,进行消费
消息的发送方式
1.我只管发,你收不到关我鸟事
DefaultMQProducer producer = new DefaultMQProducer("oneway");
//NameServer地址
producer.setNamesrvAddr("192.168.1.2:9876");
//生产者实例启动
producer.start();
//创建一个消息,指定topic、tag和消息体
String msgBody="Hello RocketMQ";
Message msg = new Message("TopicTest","TagA", JSON.toJSONBytes(msgBody));
//发送消息
producer.sendOneway(msg);
//生产者实例不再使用时关闭.
producer.shutdown();
2.这是个傻傻等着消息发完的老实人
DefaultMQProducer producer = new DefaultMQProducer("sync");
//NameServer地址
producer.setNamesrvAddr("192.168.1.2:9876");
//生产者实例启动
producer.start();
//创建一个消息,指定topic、tag和消息体
String msgBody="Hello RocketMQ";
Message msg = new Message("TopicTest","TagA", JSON.toJSONBytes(msgBody));
//发送消息
SendResult sendResult = producer.send(msg);
//生产者实例不再使用时关闭.
producer.shutdown();
3.这是个一心多用的小机灵鬼
DefaultMQProducer producer = new DefaultMQProducer("async");
//NameServer地址
producer.setNamesrvAddr("192.168.1.2:9876");
//生产者实例启动
producer.start();
//发送异步失败时的重试次数(默认值)
producer.setRetryTimesWhenSendAsyncFailed(2);
//创建一个消息,指定topic、tag和消息体
String msgBody="Hello RocketMQ";
Message msg = new Message("TopicTest","TagA", JSON.toJSONBytes(msgBody));
//发送消息
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.printf("%-10d OK %n" , new String(msg.getBody()));
}
@Override
public void onException(Throwable e) {
System.out.printf("%-10d Exception %n", e);
e.printStackTrace();
}
});
//生产者实例不再使用时关闭.
producer.shutdown();
RocketMQ的消费模式
集群消费:
使用同一个Group Id的消息订阅者属于同一个集群,一条消费只会被集群中的一个消费者消费。
广播消费
RocketMQ会将消息推送给所有的客户端。