MQ队列封装服务工程

**

MQ队列封装服务

**
特点:

  1. 提供接口开放能力,可协助项目快速开发对外开放接口
  2. 提供安全保障能力,每个协作应用方(第三方)调用互不干扰, 提供快速接入能力
  3. 提供分布式部署能力,可根据项目实际情况进行模块合并部署,或单独部署

设计图
在这里插入图片描述
**

工程配置

**
管理包配置
管理包引入

mq配置

目前使用的是RabbitMQ消息队列,所以需要在引入的工程配置文件写好MQ的相关配置信息,示例如下(根据实际情况进行配置):

# 开启发布确认,就是confirm模式. 消费端ack应答后,才将消息从队列中删除
spring.rabbitmq.publisher.confirms=true
# 发布返回
spring.rabbitmq.publisher.returns=true

spring.rabbitmq.publisher.confirm.type: correlated

## 消费端配置
# 手动ack
spring.rabbitmq.listener.simple.acknowledge-mode=manual
# 消费者最小数量
spring.rabbitmq.listener.simple.concurrency=1
# 消费者最大数量
spring.rabbitmq.listener.simple.max-concurrency=10
# 在单个请求中处理的消息个数,他应该大于等于事务数量(unack的最大数量)
spring.rabbitmq.listener.simple.prefetch=1

## 模板配置
#设置为 true 后 消费者在消息没有被路由到合适队列情况下会被return监听,而不会自动删除
spring.rabbitmq.template.mandatory=true
#是否开启消费者重试
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=5
#重试间隔时间(单位毫秒)
spring.rabbitmq.listener.simple.retry.initial-interval=5000
#重试最大时间间隔(单位毫秒)
spring.rabbitmq.listener.simple.retry.max-interval=1200000ms
#间隔时间乘子,间隔时间*乘子=下一次的间隔时间,最大不能超过设置的最大间隔时间
spring.rabbitmq.listener.simple.retry.multiplier=2
接口访问配置

在配置文件配置MQ具体的接口访问实现类,调用具体的MQ实现类方法,如调用RabbitMQ的实现类方法则如下配置:

squirrel.mq =rabbitMQ

也可以自己定义实现类,实现MessageSendService类,实现具体的方法,进行消息处理

**

使用指南

**
队列主题与模块、模块接口绑定

需在主题模块表topic_module配置好队列主题绑定对应的模块以及需要调用的接口

队列主题,目前使用RabbitMQ队列,主题前缀必须是rabbitmq.

服务已开发主题与模块的管理接口,如下图所示位置:

依赖注入
@Resource
private FeignMessageService feignMessageService;

消息体

封装具体的消息体MessageCommonBo

具体使用代码示例:

队列主题,目前使用RabbitMQ队列,主题前缀必须是rabbitmq.

// 丢给任务队列完成同步到hybase数据库
HybaseResourceObjectDTO objectDTO = buildHybaseResourceObjectDTO(entity);
MessageCommonBo messageCommonBo = new MessageCommonBo();
//雪花算法生成唯一的消息标识
SnowFlakeUtil snowFlake=new SnowFlakeUtil(0, 0);
long messageId = snowFlake.nextId();
messageCommonBo.setMessageId(String.valueOf(messageId));
//队列主题,目前使用RabbitMQ队列,主题前缀必须是rabbitmq
 messageCommonBo.setTopic("rabbitmq.resource.insert");
//真正的消息体
messageCommonBo.setData(JSON.toJSONString(objectDTO));
//租户名称
messageCommonBo.setTenantName(TenantContextHolder.getTenant());
//调用发送消息方法
feignMessageService.send(messageCommonBo);

日志表

队列模块消息发送相关的日志表

发送消息日志表:send_message:记录消息发送到服务的所有消息日志

mq消息日志表:mq_message_log:记录通过mq发送的消息日志,对消息的发送-消费进行跟踪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值