RocketMQ的四种常用消息队列及代码演示

 更新时间:2024年01月13日 10:33:43   作者:小汤汤汤汤  
这篇文章主要介绍了RocketMQ的四种常用消息队列及代码演示,普通消息队列是最基本的一种消息队列,可以按照先进先出(FIFO)的顺序存储消息,并且可以被多个消费者同时消费,可以通过在生产者端指定主题名称和标签来创建普通消息队列,需要的朋友可以参考下

消息队列

普通消息队列

普通消息队列是最基本的一种消息队列,可以按照先进先出(FIFO)的顺序存储消息,并且可以被多个消费者同时消费。可以通过在生产者端指定主题名称和标签来创建普通消息队列。

顺序消息队列

顺序消息队列可以保证相同主题和相同消息键的消息按照严格的顺序被消费,例如可以用于订单等需要保证处理顺序的场景。可以通过在创建普通消息队列时指定MessageQueueSelector对象和键来创建顺序消息队列。

延迟消息队列

延迟消息队列是一种可以在指定时间后被消费的消息队列。可以在生产者端指定消息发送的时间戳和延迟时间,RocketMQ会根据这些信息将消息存储到延迟消息队列中,并在指定的时间后投递消息到普通消息队列中。

事务消息队列

事务消息队列是一种可以保证消息投递的事务性消息队列。在生产者端发送事务消息时,会先向RocketMQ发送一条预提交消息,然后在本地事务执行成功后再提交或回滚事务。如果提交事务,则RocketMQ会将消息投递到消费者,否则将不会投递该消息。可以通过在创建事务消息队列时指定本地事务执行器来创建事务消息队列。

除此之外,RocketMQ还支持多主题(Topic)、多消息生产者(Producer)和多消费者组(Consumer Group)的概念,可以为不同的业务场景创建不同的消息队列。

代码演示

普通消息队列

@Service
public class MyProducer {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    public void sendMessage(String message) {
        rocketMQTemplate.convertAndSend("myTopic", message);
    }
}

顺序消息队列

@Service
public class MyProducer {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    public void sendOrderMessage(String message, int orderId) {
        rocketMQTemplate.setMessageQueueSelector(new OrderMessageQueueSelector());
        rocketMQTemplate.convertAndSend("myTopic", message, orderId);
    }
}
class OrderMessageQueueSelector implements MessageQueueSelector {
    @Override
    public MessageQueue select(List<MessageQueue> mqs, Message message, Object orderId) {
        int index = (int) orderId % mqs.size();
        return mqs.get(index);
    }
}

延迟消息队列

@Service
public class MyProducer {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    public void sendDelayMessage(String message, long delayTime) {
        rocketMQTemplate.syncSend("myTopic", MessageBuilder.withPayload(message)
                .build(), 3000, 2, delayTime);
    }
}

事务消息队列

@Service
public class MyTransactionListener implements RocketMQLocalTransactionListener {
    @Override
    public RocketMQLocalTransactionState executeLocalTransaction(Message message, Object o) {
        // 执行本地事务
        // 如果本地事务执行成功,则返回RocketMQLocalTransactionState.COMMIT
        // 如果本地事务执行失败,则返回RocketMQLocalTransactionState.ROLLBACK
        return RocketMQLocalTransactionState.UNKNOWN;
    }
    @Override
    public RocketMQLocalTransactionState checkLocalTransaction(Message message) {
        // 检查本地事务状态
        // 如果本地事务执行成功,则返回RocketMQLocalTransactionState.COMMIT
        // 如果本地事务执行失败,则返回RocketMQLocalTransactionState.ROLLBACK
        // 如果本地事务状态未知,则返回RocketMQLocalTransactionState.UNKNOWN
        return RocketMQLocalTransactionState.UNKNOWN;
    }
}
@Service
public class MyProducer {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    @Autowired
    private MyTransactionListener transactionListener;
    public void sendTransactionMessage(String message) {
        rocketMQTemplate.setTransactionListener(transactionListener);
        rocketMQTemplate.sendMessageInTransaction("myTransactionGroup", "myTopic",
                MessageBuilder.withpayload(message).build(), null);
}
}

到此这篇关于RocketMQ的四种常用消息队列及代码演示的文章就介绍到这了,更多相关RocketMQ常用消息队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringCloud+nacos部署在多ip环境下统一nacos服务注册ip(亲测有效)

    SpringCloud+nacos部署在多ip环境下统一nacos服务注册ip(亲测有效)

    在部署SpringCoud项目的时候分服务器部署注册同一个nacos服务,但是在服务器有多个ip存在的同时(内外网),就会出现注册服务ip不同的问题,导致一些接口无法连接访问,经过多次排查终于找到问题并找到解决方法,需要的朋友可以参考下
    2023-04-04
  • 深入理解Java显式锁的相关知识

    深入理解Java显式锁的相关知识

    今天带大家学习的是关于Java的相关知识,文章围绕着Java显式锁展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java重写equals及hashcode方法流程解析

    Java重写equals及hashcode方法流程解析

    这篇文章主要介绍了Java重写equals及hashcode方法流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Mybatis-plus插入后返回元素id的问题

    Mybatis-plus插入后返回元素id的问题

    这篇文章主要介绍了Mybatis-plus插入后返回元素id的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • springboot发送邮件功能的实现代码

    springboot发送邮件功能的实现代码

    发邮件是一个很常见的功能,在java中实现需要依靠JavaMailSender这个接口,今天通过本文给大家分享springboot发送邮件功能的实现代码,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • Apache Commons BeanUtils: JavaBean操作方法

    Apache Commons BeanUtils: JavaBean操作方法

    这篇文章主要介绍了Apache Commons BeanUtils: JavaBean操作的艺术,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • idea项目debug模式启动,断点失效,断点红点内无对勾问题及解决

    idea项目debug模式启动,断点失效,断点红点内无对勾问题及解决

    这篇文章主要介绍了idea项目debug模式启动,断点失效,断点红点内无对勾问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 几道常问Redis面试题,你能答对吗?

    几道常问Redis面试题,你能答对吗?

    在程序员面试过程中redis相关的知识是常被问到的话题。这篇文章主要介绍了13道Redis面试题,整理一下分享给大家,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • SpringBoot解决循环调用问题

    SpringBoot解决循环调用问题

    作者在将SpringBoot从1.5版本升级至2.6版本,并迁移至阿里云上运行后,遇到了循环调用问题,在Jetty容器中运行没问题,但在Tomcat容器中就出现了循环引用问题,原因是SpringBoot 2.6不鼓励循环引用,暴露出该问题,作者提供了两种解决思路
    2024-10-10
  • 浅谈解决Hibernate懒加载的4种方式

    浅谈解决Hibernate懒加载的4种方式

    这篇文章主要介绍了浅谈解决Hibernate懒加载的4种方式,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12

最新评论