消息消费者降级告警应用

背景:

 因为项目需要异步接受各方的mq消息进行发起流程/完成任务等操作。但是发起流程因为业务逻辑较重,在并发tps很高的时候容易导致mysql竞争激烈(分库分表逻辑需要优化),进而导致消费速率跟不上生产速率,导致mq消息积压。所以要针对这种情况进行监控-告警-降级

方案:

 详细介绍

1.消费速率怎么统计

 消费速率和限流算法(令牌桶)不太一样,一个是限制流量最大值问题,一个要计算实时或者周期内的均值流量。本项目使用的是滑动窗口,统计时间窗口内的流量均值。

2.获取rabbitmq队列积压数量

ConnectionFactory connectionFactory = rabbitTemplate.getConnectionFactory();
// 创建连接
Connection connection = connectionFactory.createConnection();
// 创建通道
Channel channel = connection.createChannel(false);
// 设置消息交换机
channel.exchangeDeclare("amp.topic", "direct", true, false, null);
DeclareOk declareOk = channel.queueDeclarePassive(LETTER_CLASS_QUEUE);
//获取队列中的消息个数
int queueCount = declareOk.getMessageCount();
result.put("queueCount", String.valueOf(queueCount));
// 关闭通道和连接
channel.close();
connection.close();

3.进入同步队列算法

进入同步队列的时候必须进行报警,数据进入数据库进行持久化

4.定时任务轮询存在的问题,以及如何优化

定时任务持续轮询浪费资源,当数据持久化到mq时,创建线程池持续从数据库拉取数据消费。

为了保证服务稳定,请求速率稳定需要实现:流量整形:分布式令牌桶,流量监控

5.数据库的数据消费速率设置多少合适

借鉴TCP的拥塞控制实现速率的慢启动、拥塞避免、快重试

6.怎么设计成通用的组件

模型抽象,注解,拦截器,sdk

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值