RocketMQ-3.发送和接受消息
消费者类型
推模型、拉模型、长链接
生产者类型
写入策略有如下:
同步发送、异步发送、延迟发送、发送事务消息
消息发送的基本姿势
DefaultMQProducer
public static void main(String[] args) throws MQClientException, InterruptedException {
DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
producer.start();
for (int i = 0; i < 128; i++)
try {
{
Message msg = new Message("TopicTest",
"TagA",
"OrderID188",
"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
}
} catch (Exception e) {
e.printStackTrace();
}
producer.shutdown();
}
大致的姿势如上,一些具体的参数可以根据需要进行设置。
消息的发送方式有同步和异步,发送的返回状态有如下:
FLUSH_DISK_TIMEOUT
FLUSH_SLAVE_TIMEOUT
SLAVE_NOT_AVAILABLE
SEND_OK
不同的返回状态,具体原因要根据具体配置分析。
发送延迟消息
在消息上设置延迟级别,不支持自定义时间。
message.setDelayTimeLevel(3)
先挖个孔,有空看下RocketMQ的延迟队列是如何实现的。
自定义消息发送规则
一个Topic会有多个Queue,使用Producer发送的msg,可能去往不同的queue,若要指定,可以选择使用MessageQueueSelector
自定义MessageQueueSelector的实现类,发送的时候作为参数selector传入。
存储队列位置信息
同一个Topic的msg,为了保证并发,通常设置多queue用于写入和消费。
消费时,不同的consumer维护不同queue的offset,有offsetStore的抽象结构。
在CLUSTERING模式下,共group的consumer实例,消费的消息不同,offset由Broker端控制和存储,使用RemoteBrokerOffsetStore的结构。
在BROADCASTING模式下,每个Consumer收到这个topic的所有消息,因此offset的存储和控制,存储在Consumer本地,使用LocalFileOffSetStore的结构。
浙公网安备 33010602011771号