MQ相关问题

ActiveMQ 功能完善,性能相对差,社区文档很久不更新了,丢失可能低 万级QBS,毫秒延迟,主从高可用
RabbitMQ 基于erlang,扩展性差,社区活跃(中小企业用) 万级QBS,微妙延迟,主从高可用
RocketMQ 阿里开源,定制开发,社区相对活跃,参数化配置可做到0丢失,接口简单(非jms) 10w级QBS,毫秒延迟,分布式
Kafka 大数据类的系统做实时计算或者日志采集,功能较少(核心) 10w级QBS,毫秒延迟,分布式

苏宁 WindQ (HornetQ 的定制版) 在linux平台上直接调用操作系统的AIO

作用:
1,消峰(发送消息,慢慢处理请求)
2,异步(异步调用系统)
3,解耦(下发数据,其他系统选择性,消费)

问题:
1.增加系统复杂度和维护成本
2.消息重复消费(幂等性)
消息重复消费的主要原因在于回馈机制(RabbitMQ是ack,Kafka是offset)
消费者消费完消息后回复ack, 但是刚消费完还没来得及提交系统就重启了,这时候上来就pull消息的时候由于没有提交ack或者offset,消费的还是上条消息。
解决:
1.数据库唯一约束
2.redis 存记录标志,处理过就忽略
消息发送者发送消息时携带一个全局唯一的消息id
消费者获取消费后先根据id在redis/db中查询是否存在消费记录
如果没有消费过就正常消费,消费完毕后写入redis/db
如果消息消费过就直接舍弃

3.消息丢失(可靠性)
1).生产者丢失:发送消息的时候半途丢了,开启MQ事务机制,吞吐量下降,设置合理的重试次数
代码中增加消息表,定期扫描表,重试发送
发送给消息也要有生产者确认机制
2).MQ丢失:开启MQ的持久化
3).消费者丢失:收到消息没来得及消费宕机了,ack机制,自动确认消息改为手动确认
手动ack还有个问题,业务处理过了,断了,没有ack,这个时候就要设计业务代码为幂等性,防止重复处理

4.如何保证消息顺序性
在这里插入图片描述

5.如何处理消息积压

消费者宕机
消费能力不足
发送者流量太大

1)临时紧急扩容

在这里插入图片描述

2)如果允许,则丢弃消息

https://blog.csdn.net/qq_43298198/article/details/106019759?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242

rabbitmq 延时队列
第一种
在这里插入图片描述

第二种 topic
在这里插入图片描述

在java代码中MyMqConfig中创建2个队列,2个绑定和1个交换机,@Bean注入

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

真正的解锁库存业务

在这里插入图片描述

在这里插入图片描述

@EnableRabbit
加配置文件
加自定义配置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值