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的结构。

posted @ 2021-10-28 23:46  simplec  阅读(120)  评论(0)    收藏  举报