首页 > 其他分享 >MQ

MQ

时间:2024-07-27 13:50:58浏览次数:13  
标签:消费者 队列 topic 处理 MQ 消息

为什么用MQ:

MQ:messagequene,消息队列是一种先进先出的数据结构:

  • 应用之间的解耦:比如A 系统,通知B系统,传统来说:A--B之间通过RPC进行交互,现在可以通过A 把消息发送给MQ,B 订阅MQ即可,这样可以解耦AB应用,为啥解耦呢,这样系统的容错性就越低。
  • 流量消峰:
  • 数据分发:

MQ的有点和缺点:

优点:解耦,消峰,数据分发:
缺点:系统可用性降低,系统复杂度提高,一致性问题。

ActiveMQ,rocketMq,RabbitMQ, kafka

rocket kafka 性能都比较高,10万级。

Rocket MQ 是阿里于2016年MQ中间件,使用Java语言开发的,ROckeMQ承接了双11等高等并发场景的消息的流转能够处理万亿级别的消息。

rocketMQ的角色介绍

producer:消息的发送者,无状态的,节点之间无信息同步,举例:发信者
consumer:消息的消费者,举例:收信任
Broker:暂存传输消息,举例:邮局,
nameserver:管理borker,举例:邮局管理者
topic:区分消息的种类,一个发送者可以给一个或者多个topic,一个消息的接收者可以订阅一个或者多个topic消息。举例:信件的类别
Message Queue :topic 的分区,用于并行发送消息和接收消息。

MQ测试过程中的测试点:

  1. 对于producer生产者,数据是否真的推送到队列中,数据是否推送到正确的topic下边。
  2. 如果数据推送的过多,前面超过的数据如何处理,超过队列;
  3. 同时要注意一下每个topic下边的queue如何分布数据
  4. 对于consumer,测试消费者的消费信息源是否正确,能否从正确的topic中,拿到正确的消息,
  5. 测试消费者的消息策略是什么,数据被消费后是否清除,
  6. 当消息队列过长,消费速度过慢时候,MQ溢出的时候如何处理,是否会越权消费别的topic的消息。
  7. pull的消息类型:需要测试拉去的时候间隔
  8. push的消息类型:需要测试消费者有没有及时得到消息,并消费。

为什么使用MQ:

实现服务之间的解耦,异步,削峰:

  1. 比如生成一个订单--订单要同步短信服务,积分服务,这样的我们只需要把订单同步到消息队列里面,然后广播出去即可。使用异步操作。如果使用使用同步的话,我们要拿到短信服务或者积分服务返回才能真正的下单成功,如果是MQ,异步的方式,即使第三方短信挂了,用户也可以正常下单的。
    异步:可以提高效率,避免第三方带来的风险。
    2.同样是订单同步,如果不加入消息队列,会导致,后边如果继续同步给营销服务等会耦合在一起,使用MQ的话,就不用在改动了,只需要通知给营销服务,这就解耦了,可以提高系统的扩展性和可用性。
    3.削峰:在我们的业务处理中,每天的时间段处理问题的峰值是不一样的,比如服务如果处理不了,消息队列可以短暂的存储起来,可以达到短暂的消峰。

rabbitMQ怎么保证消息不丢失:

  1. 确保消息到MQ,使用发送方确认模式,
  2. 确保消息路由到正确的队列,如果发生了路由失败,开启路由失败通知,
  3. 确保消息在队列中正确的存储:交换机,队列,消息都要持久化,万一宕机可以存储
  4. 确保消息从正确的队列投递到消费者:手动确认---->交给消费者来确认。

什么是MQ消息重复:

比如消息队列,负载过高,超时,然后会重复发送。

当消息存储了之后,消费者处理中出现问题,导致这个消息没有删除,会在发送一次。

什么是幂等性:

对于消息接收端的情况,幂等的含义采用多次的调用,得到同样的结果。
所以对于重复消息处理就是,使用消息接收端的处理使用幂等性,这样降低消息中间件的整体复杂性,但是也给消息接收带了了限制。
1.MVCC:多版本并发控制,乐观锁,在生产者发送消息实现数据更新时候,增加版本号,这样消费者去更新的时候需要比较数据的版本号,这种对我们的开发不太友好,看起来处理起来完美,但是要求比较高。
2.去重表:
增加唯一性索引,

标签:消费者,队列,topic,处理,MQ,消息
From: https://www.cnblogs.com/surewing/p/18326871

相关文章

  • SpringBoot集成RocketMQ
    RocketMQ的延迟消息概述举例说明延迟:PDD的拼单,大家在pdd拼单购买商品时,下单后,会有一个拼单倒计时,如果在倒计时结束的时候,还未拼单成功,那么系统就会取消到这个订单。技术实现:只需在消息生产者代码中添加一句:message.setDelayTimeLevel(3);//设置延迟的等级,即消费者接收到......
  • MFC制作MQTT(EMQX)客户端 - 开、关功能实现(附源码)
    前言全局说明MFC制作MQTT客户端(附源码)一、说明环境:Windows7旗舰版VisualStudio2013CMakeversion3.19.8paho.mqtt.cV1.3.13二、MFC功能代码:2.1引入h头文件#include"include\MQTTAsync.h"#include"include\MQTTClient.h"2.2添加连接服务器信息......
  • MFC制作MQTT(EMQX)客户端 - 约定、依赖文件放置(附源码)
    前言全局说明MFC制作MQTT客户端(附源码)一、说明环境:Windows7旗舰版VisualStudio2013CMakeversion3.19.8paho.mqtt.cV1.3.13二、说明、约定:说明:因为MFC调用paho.mqtt.c的API所以,要把编译出来的相关文件,放到MFC的工程中,方便调用约定:为了方便后续描......
  • SpringBoot 结合官网对MQTT消息队列整合记录
    SpringBoot结合官网对MQTT消息队列整合首先是mavenPom的引入MqttClient<dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.......
  • C#连接使用ActiveMQ消息队列
      安装部署好集群环境:192.168.209.133:61616,192.168.209.134:61616,192.168.209.135:61616因为ActiveMQ的集群模式是一种master-slave模式,master节点对外提供服务,slave节点只做数据同步备份,当master节点挂了,slave就会成为master从而继续对外提供服务,以此实现高可用。......
  • 错误 1 error LNK2019: 无法解析的外部符号 _MQTTClient_create,该符号在函数 "protect
    前言全局说明错误1errorLNK2019:无法解析的外部符号_MQTTClient_create,该符号在函数"protected:virtualint__thiscallCmfc_mqttclientpoweronoffDlg::OnInitDialog(void)"(?OnInitDialog@Cmfc_mqttclientpoweronoffDlg@@MAEHXZ)中被引用一、说明环境:Windows1......
  • go对接mqtt
    在Go语言中对接MQTT服务,你可以使用 paho.mqtt.golang 这个库,这是一个EclipsePahoMQTT客户端的Go语言实现。以下是一些基本步骤和示例代码,帮助你开始使用Go语言对接MQTT服务。1. 安装MQTT客户端库:使用Go的包管理器安装 paho.mqtt.golang 库:gogetgithub.com/eclipse/......
  • RocketMQ 面试题及答案整理,最新面试题
    RocketMQ的消息存储机制是如何设计的?RocketMQ消息存储机制的设计原理:1、CommitLog文件:所有的消息都存储在一个连续的CommitLog文件中,保证了消息的顺序写入,提高写入性能。2、消费队列:为每个主题的每个队列创建消费队列文件,存储指向CommitLog中消息的索引,加快消费速度......
  • mqtt- 轻量级的消息传输协议
    金融数据流:实时数据传输 实现方式基于mqttMQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,主要用于低带宽和高延迟的网络环境。它特别适合于物联网(IoT)应用、移动设备和其他需要可靠消息传递的场景。MQTT的主要特点1.轻量级和高效:•MQTT协议......
  • Windows 使用 Visual Studio 2013 编译 paho-mqtt 生成dll lib 文件
    前言全局说明Windows使用VisualStudio2013编译paho-mqtt生成dlllib文件一、说明环境:Windows7旗舰版VisualStudio2013RTMPROCHS二、环境准备2.1安装VisualStudio2013https://www.cnblogs.com/wutou/p/183205322.2安装CMakehttps://www.cnblo......