RocketMQ各种消息的生产与消费Demo

本文通过实例演示了RocketMQ的顺序消息(全局有序和分区有序)、延时消息以及批量消息的生产和消费。在顺序消息中,强调了消息进入MQ前的排序规则和消费时的注意事项。在延时消息部分,展示了设置延时等级来实现延迟投递。批量消息部分则介绍了如何批量发送和处理可能超过限制的消息。
摘要由CSDN通过智能技术生成

我们对顺序消息延时消息批量消息过滤消息进行一个demo,方便以后cv。

顺序消息的生产与消费

顺序消息是指当消息消费的时候,会按照消息发送的顺序进行消费。RocketMQ可以保证消息严格的有序,这里分为全局有序和分区有序。 全局有序是针对所有消息的,每一个消息都按照绝对的先入先出原则。 分区有序,是指将需要有序的消息控制发送到同一个Queue上,消费的时候从这个Queue上拉取。即相对每个Queue是有序的

全局有序

控制Topic指定只有一个队列,并且保证生产者与消费者只有一个就可以了

分区有序

要完成分区有序性,在生产者环节使用自定义的消息队列选择策略,我们以下单为例,我们需要确保订单号尾数相同的消息会被先后发送到同一个队列中,然后再消费端开启负载均衡模式,每个消费者只消费一个队列。最终确保一个消费者拿到的消息对于一个订单来说是有序的。

也就是说,需要自定义规则使得同一个订单的或者同一个业务逻辑的消息发送到同一个消息队列,再让一个消费者去消费的时候,就是顺序消费了。

生产者

public static void main(String[] args) throws Exception {
    DefaultMQProducer producer = new DefaultMQProducer("luke_group_order");
    producer.setNamesrvAddr("127.0.0.1:9876");
    producer.start();
    List<Order> orderList = buildOrder();

    for (int i = 0; i < orderList.size(); i++) {
        String body = orderList.get(i).toString();
        Message msg = new Message("luke_topic_order", null, "KEY" + i, body.getBytes());

        SendResult sendResult = producer.send(msg, new MessageQueueSelector() {
            @Override
            public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
                Long id = (Long)arg;
                long index = id % mqs.size();
                return mqs.get((int) index);
            }
        }, orderList.get(i).getId());
    }
    producer.shutdown();
}

Order类

@Data
@NoArgsConstructor
@ToString
class Order{
    Long id;
    String info;
}

模拟消息

模拟一个列表,我把中间的2和3删了,要不太长了。这里是按照提交ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值