RocketMQ集成Springboot --Chapter3

RocketMQ实现顺序消息

实际开发中如果没有顺序消费的必要需求,不建议使用顺序消费,顺序消费是单线程的效率比较低。

代码示例

-------生产者

生产者主要设置队列选择器在里面写选择队列的逻辑,通过取模进行选取, rocketMQTemplate.sendOneWayOrderly("orderlyTopicBoot",msg,String.valueOf(step.getOrderId()));

java 复制代码
    /**
     *生产者代码
     * 顺序消费
     */
    @Test
    public void sendOlderlyMsg(){
        //设置队列选择器
        rocketMQTemplate.setMessageQueueSelector(new MessageQueueSelector() {
            @Override
            public MessageQueue select(List<MessageQueue> list, org.apache.rocketmq.common.message.Message message, Object o) {
                String orderIdStr = (String) o;
                long orderId = Long.parseLong(orderIdStr);
                int index = (int) (orderId % list.size());
                return list.get(index);
            }
        });
        List<OrderStep> orderSteps = OrderUtil.buildOrders();
        for (OrderStep step : orderSteps) {
            Message<String> msg = MessageBuilder.withPayload(step.toString()).build();
            rocketMQTemplate.sendOneWayOrderly("orderlyTopicBoot",msg,String.valueOf(step.getOrderId()));
        }
    }

-------消费者

只需要在@RocketMQMessageListener注解中指定一下消费模式为顺序消费即可开启单线程消费consumeMode = ConsumeMode.ORDERLY

java 复制代码
    /**
     *
     * 顺序消费
     */
@Component
@RocketMQMessageListener(consumerGroup = "olderConsumerBoot",topic = "orderlyTopicBoot",consumeMode = ConsumeMode.ORDERLY)
public class OlderlyTopicListener implements RocketMQListener<MessageExt> {
    @Override
    public void onMessage(MessageExt messageExt) {
        System.out.println("当前线程:"+Thread.currentThread()+"队列ID:"+messageExt.getQueueId()+",消息内容:"+new String(messageExt.getBody(), Charset.defaultCharset()));

    }
}
相关推荐
java—大象1 小时前
基于java+springboot+layui的流浪动物交流信息平台设计实现
java·开发语言·spring boot·layui·课程设计
ApiHug2 小时前
ApiSmart x Qwen2.5-Coder 开源旗舰编程模型媲美 GPT-4o, ApiSmart 实测!
人工智能·spring boot·spring·ai编程·apihug
魔道不误砍柴功2 小时前
探秘Spring Boot中的@Conditional注解
数据库·spring boot·oracle
杨哥带你写代码2 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_2 小时前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端
晴天飛 雪2 小时前
Spring Boot MySQL 分库分表
spring boot·后端·mysql
weixin_537590452 小时前
《Spring boot从入门到实战》第七章习题答案
数据库·spring boot·后端
Qi妙代码3 小时前
MyBatisPlus(Spring Boot版)的基本使用
java·spring boot·后端
《源码好优多》3 小时前
基于Java Springboot在线教育学习系统
java·spring boot·学习
宇宙超级勇猛无敌暴龙战神3 小时前
Springboot整合xxl-job
java·spring boot·后端·xxl-job·定时任务