RMQ

RMQ说明文档


快速入门

<p>[TOC]</p> <h2>初始化RMQ数据库</h2> <p>下载项目源码并解压,执行 &quot;RMQ数据库初始化SQL脚本&quot;,正常情况下会自动创建数据库(<strong>reliable-message</strong>)以及生成<strong>7</strong>张表(两张核心表<strong>t_message</strong>、<strong>t_queue</strong>,其他为管理后台所需的账号、资源、角色等基础信息表)。&quot;RMQ数据库初始化SQL脚本&quot; 路径为:</p> <pre><code>/reliable-message/sql/rmq-init.sql</code></pre> <h2>编译运行RMQ</h2> <h3>编译源码</h3> <p>按照maven格式将源码导入IDE, 使用maven进行编译即可。</p> <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> <pre><code>注意: 如果对项目中各个子系统的功能流程不熟悉。可先阅读项目介绍-流程说明。</code></pre> <hr /> <h3>rmq-service配置、运行</h3> <h4>service配置</h4> <p>配置文件路径:</p> <pre><code>/reliable-message/rmq-service/src/main/resources/application-dev.yaml</code></pre> <p>配置文件说明:</p> <pre><code class="language-yaml">spring: # 数据库连接配置 datasource: url: jdbc:mysql://127.0.0.1:3306/reliable-message?useUnicode=true&amp;characterEncoding=utf-8 username: root password: root driver-class-name: com.mysql.jdbc.Driver hikari: connection-test-query: SELECT 1 # ActiveMQ连接配置 activemq: broker-url: tcp://127.0.0.1:61616 user: admin password: admin # Dubbo配置 dubbo: application: name: rmq-service logger: slf4j registry: address: zookeeper://127.0.0.1:2181 protocol: name: dubbo port: 20881 scan: base-packages: com.cn.rmq.service.impl</code></pre> <h4>service运行</h4> <p>模块基于SpringBoot构建,可使用Maven命令(mvn package)打成jar包运行(java -jar)。 调试阶段可直接在IDE中运行ServiceApplication。文件路径为:</p> <pre><code>/reliable-message/rmq-service/src/main/java/com/cn/rmq/service/ServiceApplication.java</code></pre> <h4>集群(可选)</h4> <p>由于项目基于Dubbo框架搭建,因此项目默认支持集群部署,只需将rmq-service模块jar包运行在不同服务器上。即可完成rmq-service集群搭建。</p> <hr /> <h3>rmq-schedule配置、运行</h3> <h4>schedule配置</h4> <p>配置文件路径:</p> <pre><code>/reliable-message/rmq-schedule/src/main/resources/application-dev.yaml</code></pre> <p>配置文件说明:</p> <pre><code class="language-yaml"># Dubbo配置 dubbo: application: name: rmq-check logger: slf4j registry: address: zookeeper://127.0.0.1:2181 scan: base-packages: com.cn.rmq.schedule.service.impl schedule: # 消息确认子系统配置 check: core-pool-size: 10 max-pool-size: 100 keep-alive-time: 60000 queue-capacity: 10 wait-complete-timeout: 10000 # 消息恢复子系统配置 recover: core-pool-size: 10 max-pool-size: 100 keep-alive-time: 60000 queue-capacity: 10 wait-complete-timeout: 30000 interval: - 4 - 10 - 30 - 60 - 120 - 360 - 900</code></pre> <h4>schedule运行</h4> <p>模块基于SpringBoot构建,可使用Maven命令(mvn package)打成jar包运行(java -jar)。 调试阶段可直接在IDE中运行ScheduleApplication。文件路径为:</p> <pre><code>/reliable-message/rmq-schedule/src/main/java/com/cn/rmq/schedule/ScheduleApplication.java</code></pre> <hr /> <h3>rmq-cms配置、部署</h3> <h4>cms配置</h4> <p>配置文件路径:</p> <pre><code>/reliable-message/rmq-cms/src/main/resources/application-dev.yaml</code></pre> <p>配置文件说明:</p> <pre><code class="language-yaml"># Dubbo配置 # rmq-cms运行端口和访问根路径,可根据自身情况配置 server: port: 10081 servlet: context-path: /rmq-cms # Dubbo配置 dubbo: application: name: rmq-cms logger: slf4j registry: address: zookeeper://127.0.0.1:2181 consumer: check: false</code></pre> <h4>cms运行</h4> <p>模块基于SpringBoot构建,可使用Maven命令(mvn package)打成jar包运行(java -jar)。 调试阶段可直接在IDE中运行CmsApplication。文件路径为:</p> <pre><code>/reliable-message/rmq-cms/src/main/java/com/cn/rmq/cms/CmsApplication.java</code></pre> <h2>业务系统对接RMQ</h2> <p>目前仅支持Dubbo项目,对接示例参考:</p> <p><a href="https://gitee.com/NuLiing/reliable-message-samples" title="reliable-message-samples">reliable-message-samples</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> <h2>配置消息队列</h2> <p>访问消息管理子系统,登录后选择队列管理,点击添加按钮,添加业务消息队列,参考下面截图中的参数配置,点击保存。(注意:消费队列需与业务代码中定义的队列名称保持一致。)</p> <pre><code>消息管理子访问地址: http://127.0.0.1:10081/rmq-cms 登录账号: admin 登录密码: admin</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/f1f1cb918f8bb6ec52b956c93871a578?showdoc=.jpg" alt="登录界面" title="登录界面" /></p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/9e758dcc2ad578f47243e2c62960eadb?showdoc=.jpg" alt="队列管理" title="队列管理" /></p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/15628ea1ef5651d2d4e01a1c4249f874?showdoc=.jpg" alt="添加队列" title="添加队列" /></p> <p>消息管理子系统详细使用方式查看《<a href="https://www.showdoc.cc/rmq?page_id=1820729310123379" title="消息管理子系统">消息管理子系统</a>》</p>

页面列表

ITEM_HTML