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()));

    }
}
相关推荐
appearappear17 分钟前
Mac 上重新安装了Cursor 2.2.30,重新配置 springboot 过程记录
java·spring boot·后端
鹿角片ljp1 小时前
Spring Boot Web入门:从零开始构建web程序
前端·spring boot·后端
程序员阿鹏2 小时前
SpringBoot自动装配原理
java·开发语言·spring boot·后端·spring·tomcat·maven
老华带你飞2 小时前
工会管理|基于springboot 工会管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
Echo flower2 小时前
Spring Boot WebFlux 实现流式数据传输与断点续传
java·spring boot·后端
北城以北88882 小时前
SpringBoot--Redis基础知识
java·spring boot·redis·后端·intellij-idea
Alsn863 小时前
28.IDEA 专业版创建 Spring Boot 项目并打包为 jar 运行
spring boot·intellij-idea·jar
柯南二号3 小时前
【后端】【Java配置】MacOS本地安装并运行RocketMQ
rocketmq·java-rocketmq
无心水3 小时前
爆款实战!Vue3+Spring Boot+MySQL实现电商商品自动分类系统(含三级类目管理+规则兜底)
spring boot·mysql·分类·vue3商品分类·spring boot电商系统·三级类目管理·商品自动分类
qq_12498707533 小时前
基于springboot的幼儿园家校联动小程序的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·微信小程序·小程序