Code Monkey home page Code Monkey logo

springboot-rocketmq's Introduction

优势

用原生的时候每个消费者和生产者都需要重复编写启动代码,基于这个痛点,本作者进行封装,沉淀为基础架构 让程序员专注于业务开发。

使用 以下以hello 服务来作为例子讲解
  1. 在启动类HelloApplication上加上注解 @EnableRocketMq
  2. 在配置文件上填写相关配置

mq 配置

            rocketmq:
              # NameServer地址 若是集群,用;作为地址的分隔符
              namesrvAddr: 127.0.0.1:9876
              # 生产者的组名
              producerId: hello
  1. 发布消息,请查看ProducerTest 类,增加了自定义的类RocketProducerService 进一步封装DefaultMQProducer ,包含日志打印,也为了以后进一步扩展,比如以后直接使用阿里云的rocketmq
  2. 监听消息请查看MqResultListener 类,监听消息只需要实现接口类MessageListener就可以,注意有顺序消息和无顺序消息不同,请查看注意事项说明

使用消息事件实现分布式事务

原理

为了确保发送mq 和保存本地事务要么同时成功,要么同时失败。一般思路是根据MQ的发送成功还是失败来判断本地事务是成功还是失败 但是发送MQ是走网络了,网络有个神奇的返回值:网络超时,这个没办法明确的知道MQ是成功还是失败,也就没办法决定是提交本地事务还是回滚本地事务 因此,我们这里不直接发送MQ,而是采用巧妙的方式,仅仅是保存消息到表里面,这样就可以利用数据库的事务来保证要么一起成功要么一起失败。 之后再通过定时器MqTransMessageTask来扫描消息表来发送MQ消息

实践

1、在每一个需要使用的消息分布式事务的库执行db.sql 中的mq_trans_message 消息表 2、调用MqTransMessageService.transSendMsg() 进行发送事务消息

#注意事项:
1、消费有顺序消息时,请使用@RocketMqOrderListener 注解,并且实现接口类MessageOrderListener
2、消费普通消息时,请使用@RocketMqListener 注解,并且实现接口类MessageListener

springboot-rocketmq's People

Contributors

dependabot[bot] avatar lizhuonb avatar wizhuo avatar zhuolili avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

springboot-rocketmq's Issues

本项目中提点建议

博主,你好,我已阅读过你封装的rockermq,从出发点上看,确实很受启发。不过,对于文中所提的mq中分布式事务与博主的理解略有不同。我认为的消息中的分布式事务应该是消费者消费成功与否,对生产者的本地保存是进行事务提交还是事务回滚。而本文中所提及的这种情况,不是比较常见,一般生产者和mq都是在同一局域网(内网)中进行传输的,同时,如果网络又故障,mq中生产者与服务器早就出现断开情况,不会说在发送消息时就出现网络超时的。综上,我觉得解决那种消费者消费失败与否引发的才算分布式事务吧。本人也正在寻找这种问题的解决方案,如果博主有好的idea,,不凡分享一下。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.