快速入门
<p>[TOC]</p>
<h2>初始化RMQ数据库</h2>
<p>下载项目源码并解压,执行 "RMQ数据库初始化SQL脚本",正常情况下会自动创建数据库(<strong>reliable-message</strong>)以及生成<strong>7</strong>张表(两张核心表<strong>t_message</strong>、<strong>t_queue</strong>,其他为管理后台所需的账号、资源、角色等基础信息表)。"RMQ数据库初始化SQL脚本" 路径为:</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&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
<dependency>
<groupId>com.gitee.nuliing</groupId>
<artifactId>rmq-api</artifactId>
<version>${最新稳定版本}</version>
</dependency></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(() -> 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>