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

    }
}
相关推荐
舒克日记1 小时前
基于springboot的民谣网站的设计与实现
java·spring boot·后端
lang201509283 小时前
Spring Boot配置属性:类型安全的最佳实践
spring boot
Jabes.yang8 小时前
Java面试场景:从Spring Web到Kafka的音视频应用挑战
大数据·spring boot·kafka·spring security·java面试·spring webflux
程序员小凯11 小时前
Spring Boot性能优化详解
spring boot·后端·性能优化
tuine11 小时前
SpringBoot使用LocalDate接收参数解析问题
java·spring boot·后端
番茄Salad13 小时前
Spring Boot项目中Maven引入依赖常见报错问题解决
spring boot·后端·maven
摇滚侠13 小时前
Spring Boot 3零基础教程,yml配置文件,笔记13
spring boot·redis·笔记
!if14 小时前
springboot mybatisplus 配置SQL日志,但是没有日志输出
spring boot·sql·mybatis
阿挥的编程日记14 小时前
基于SpringBoot的影评管理系统
java·spring boot·后端
java坤坤14 小时前
Spring Boot 集成 SpringDoc OpenAPI(Swagger)实战:从配置到接口文档落地
java·spring boot·后端