常用的mq中间件有哪些
老牌的RabbitMQ、ActiveMQ,炙手可热的Kafka、阿里的RocketMQ
对mq中间件的理解
1、MQ中间件由Broker核心服务器、生成者Producer、消费者Consumer、消息体Message、主题Topic、队列Queue组成。
2、生产者生产消息并发送给broker
3、消费者从brock获取消息并进行业务处理
4、MQ中间件分为点对点p2p和发布/订阅模式
5、点对点模式使用queue作为通信载体,队列支持多个消费者,但是每个消息只能被一个消费者消费。
5、发布/订阅模式使用主题topic作为通信载体,也支持多个消费者,但是每个消息可以被多个消费者使用。
mq的应用场景
1、减低服务之间的耦合性。跨端项目,我们不能直接访问其它端的数据库表,可通过接受MQ的方式获取我们需要的数据。
3、扩展性好。发布/订阅式消息队列支持多个消费者,一端产生的消息可以在多处被消费。
4、冗余性好。有时候服务出现异常,会导致MQ堆积,但是这些数据不会丢失,服务重启后,仍可以继续消费这些消息。
5、可起到过载保护功能。约课高峰期服务访问量会剧增,使用消息队列能使关键组件顶住突发的访问压力,而不会因为突发的请求使服务崩溃。
6、缓存,调节系统响应时间。
7、异步通信。消息队列提供异步处理机制,就是把消息放到队列中,什么时候用的时候再处理。我们公司的ELK日志收集平台消费的kafka消息就是异步处理机制。
8、数据流处理。ELK日志收集平台消费的kafka消息,避免了采集量大于日志清洗、存储的能力时,日志系统处理不及时造成系统死机引起的日志丢失。
mq如何测试
模拟发送MQ后,从MQ管理平台能看到mq生产和消费记录,mq消费间隔一段时间后,查看相关数据有没有落库。
mq 是否能保证消息不重复?
1、绝大多数情况下,消息是不重复的。作为一款分布式消息中间件,在网络抖动、应用处理超时等异常情况下,无法保证消息不重复,但是能保证消息不丢失;
2、需要业务方自己实现去重逻辑,不推荐使用msgid来做去重,因为msgid在绝大部分情况下,是不会重复,不排除极端情况可能会出现重复,或者多个集群之间出现重复msgid;
3、可以使用订单编号等唯一的作为唯一标识来去重。
mq消息已经发出,但是消费端没有收到,怎么去查?
使用mq消息平台,使用 Topic 按时间范围进行查询
mq消费失败如何重新消费消息?
消费mq的代码如果出现null返回null或者异常等,消息都会走重试流程,默认重试 16 次(重试次数可以自定义),如果重试 16 次后,仍然失败,则消息丢弃;
消息重试间隔可以通过context控制,如果不控制,会越来越长。
mq消费失败怎么排查?
1、检查topic配置
2、检查生成者、消费者的对应关系配置
3、确认生产者生成了消息
4、查看日志信息