RMQ

RMQ说明文档


README

<p align="center"> <img src="https://www.showdoc.cc/server/api/common/visitfile/sign/51a6c9fb88d79eb8adfcd4256e7f6a6e?showdoc=.jpg" ></img> </p> <p align="center"> <a target="_blank" href="https://search.maven.org/search?q=g:%22com.gitee.nuliing%22%20AND%20a:%22rmq-api%22"> <img src="https://img.shields.io/maven-central/v/com.gitee.nuliing/rmq-api.svg?label=Maven%20Central" ></img> </a> <a target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0.html"> <img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" ></img> </a> <a target="_blank" href="https://www.oracle.com/technetwork/java/javase/downloads/index.html"> <img src="https://img.shields.io/badge/JDK-1.8+-green.svg" ></img> </a> <a target="_blank" href="https://www.codacy.com/app/a327919006/reliable-message?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=a327919006/reliable-message&amp;utm_campaign=Badge_Grade"> <img src="https://api.codacy.com/project/badge/Grade/26af17c01c55497e9296160ef2d13352"/> </a> </p> <hr /> <h4>介绍</h4> <p><strong>RMQ</strong>(reliable-message-queue)是<strong>基于可靠消息的最终一致性</strong>的分布式事务解决方案。</p> <h1><a href="https://www.showdoc.cc/rmq" title="中文文档">中文文档</a></h1> <ul> <li>中文文档地址:<a href="https://www.showdoc.cc/rmq" title="https://www.showdoc.cc/rmq"><a href="https://www.showdoc.cc/rmq">https://www.showdoc.cc/rmq</a></a></li> </ul> <h5>RMQ对接示例:</h5> <ul> <li><a href="https://gitee.com/NuLiing/reliable-message-samples" title="https://gitee.com/NuLiing/reliable-message-samples"><a href="https://gitee.com/NuLiing/reliable-message-samples">https://gitee.com/NuLiing/reliable-message-samples</a></a></li> <li><a href="https://github.com/a327919006/reliable-message-samples" title="https://github.com/a327919006/reliable-message-samples"><a href="https://github.com/a327919006/reliable-message-samples">https://github.com/a327919006/reliable-message-samples</a></a></li> </ul> <h2>框架定位</h2> <ul> <li>RMQ本身不生产消息队列,只是消息的搬运工。</li> <li>RMQ框架提供消息预发送、消息发送、消息确认、消息恢复、消息管理等功能,结合成熟的消息中间件,解决分布式事务,达到数据最终一致性。</li> </ul> <hr /> <h4>Maven模块描述</h4> <table> <thead> <tr> <th>模块名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>rmq-api</td> <td>提供业务系统调用的RMQ服务接口</td> </tr> <tr> <td>rmq-service-api</td> <td>基础消息服务接口、系统工具类、实体类封装</td> </tr> <tr> <td>rmq-service</td> <td>RMQ服务接口实现、基础消息服务接口实现、消息管理子系统服务接口实现</td> </tr> <tr> <td>rmq-schedule-api</td> <td>消息确认子系统、消息恢复子系统服务接口</td> </tr> <tr> <td>rmq-schedule</td> <td>消息确认子系统,与上游业务系统确认消息是否发送<br>消息恢复子系统,重新发送消息给下游业务</td> </tr> <tr> <td>rmq-cms-api</td> <td>消息管理子系统服务接口、实体类封装</td> </tr> <tr> <td>rmq-cms</td> <td>消息管理子系统,提供消息管理后台</td> </tr> <tr> <td>rmq-dal</td> <td>数据库访问层: sql语句</td> </tr> </tbody> </table> <hr /> <h2>业务系统对接RMQ</h2> <p>详细对接说明请查看《<a href="https://www.showdoc.cc/rmq?page_id=1815635527586509" title="快速入门">快速入门</a>》和《<a href="https://www.showdoc.cc/rmq?page_id=1820953552972418" title="对接示例说明">对接示例说明</a>》</p> <h4>maven依赖</h4> <p>在业务系统的pom文件中引入rmq-api最新版本依赖:</p> <pre><code># 中央仓库: https://search.maven.org/search?q=rmq-api &lt;dependency&gt; &lt;groupId&gt;com.gitee.nuliing&lt;/groupId&gt; &lt;artifactId&gt;rmq-api&lt;/artifactId&gt; &lt;version&gt;${最新稳定版本}&lt;/version&gt; &lt;/dependency&gt;</code></pre> <h4>在业务代码中引入RMQ的Dubbo服务</h4> <pre><code>import org.apache.dubbo.config.annotation.Reference; import com.cn.rmq.api.service.IRmqService; @Reference private IRmqService rmqService;</code></pre> <h4>编写消息发送方业务方法</h4> <pre><code>public void doBusiness() { // 自定义消息队列名称 String queue = "test.queue"; // 消息内容, 如果传输对象,建议转换成json字符串 String messageContent = "......"; // 调用RMQ,预发送消息 String messageId = rmqService.createPreMessage(queue, messageContent); // 执行业务 ... ... // 异步调用RMQ,确认发送消息 RpcContext.getContext().asyncCall(() -&gt; rmqService.confirmAndSendMessage(messageId)); }</code></pre> <h4>编写消息消费方业务方法</h4> <pre><code>public void handleMsg(RmqMessage msg) { try { String messageContent = msg.getMessageBody(); // 执行业务 ... ... // 通知RMQ消息消费成功 // 如果使用的是RMQ的directSendMessage,则无需通知 if (StringUtils.isNotBlank(msg.getMessageId())) { rmqService.deleteMessageById(msg.getMessageId()); } } catch (Exception e) { ... } }</code></pre> <hr /> <h4>更多分布式事务框架</h4> <table> <thead> <tr> <th>框架</th> <th>描述</th> <th>状态</th> </tr> </thead> <tbody> <tr> <td><a href="https://gitee.com/NuLiing/reliable-message" title="cn-rmq">cn-rmq</a></td> <td>基于可靠消息的最终一致性方案</td> <td>已发布</td> </tr> <tr> <td><a href="https://gitee.com/NuLiing/cn-ben" title="cn-ben">cn-ben</a></td> <td>最大努力通知方案</td> <td>已发布</td> </tr> </tbody> </table>

页面列表

ITEM_HTML