1、MQ_介绍、优缺点、类型等

3 篇文章 0 订阅

MQ介绍

1. MQ概述

MQ(Message Queue):消息队列,是基础数据结构中FIFO(first in first out)的一种数据结构。一般用来解决流量削峰、应用解耦、异步处理等问题,实现高性能,高可用,可伸缩和最终一致性架构。

  • 高性能:性能好,性能高
  • 高可用:程序不会随便挂,系统的稳定性强
  • 可伸缩:增加计算机资源的时候程序的吞吐和处理能力页跟随增加
  • 最终一致性:存进来和取出去的数据是一致的

在这里插入图片描述
图上这种情况,耦合性很大,如果其中一个系统挂掉了,整个系统就停止了

下面这种情况使用了中间件,订单系统直接向中间件发起请求,这样各个系统的耦合性降低
在这里插入图片描述
小结:

  • MQ:消息队列,用于消息传递的中间件
  • 发送消息方称为生产者
  • 接收消息方称为消费者

2. MQ优缺点

  • 优点:
    • 流量削峰:避免流量高峰期导致系统挂掉,提高系统的稳定性
    • 应用解耦:降低系统之间的依赖,提高系统容错率
    • 异步请求:提速增效,提升用户体验

削峰:

  • RPS 1000:每秒处理请求的数量为1000

  • MQ可以让程序架构高内聚,低耦合
    在这里插入图片描述
    在这里插入图片描述
    解耦:
    在这里插入图片描述
    在这里插入图片描述
    异步处理:
    在这里插入图片描述
    在这里插入图片描述

  • 缺点

    • 提高了系统的复杂度,降低了系统稳定性和可用性
      • 引入了第三方技术,增加了宕机的风险
      • 如何保证系统高可用
    • 带来了数据一致性的问题
      • 各系统间的调用增加了不确定性,如何保证最终一致性
      • 怎么处理消息丢失的情况

小结:

  • 优点
    • 流量消峰:避免流量高峰时期导致系统挂掉,提高系统稳定性
    • 应用解耦:降低系统间依赖,提高系统容错性
    • 异步处理:提速增效,提高用户体验感
  • 缺点
    • 提高了系统复杂度,降低了系统稳定性和可用性
    • 带来了数据一致性问题

3.常见的MQ介绍

在这里插入图片描述
AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。2006年,AMQP 规范发布。

4.RabbitMQ概述

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。

官网地址:https://www.rabbitmq.com/

  • 架构图:
    在这里插入图片描述

5.RabbitMQ名词解释

  • Producer:生产者,发送消息的程序
  • Consumer:消费者,接收消息的程序
  • Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker
  • Connection:生产者,消费者,Broker之间的TCP连接
  • Channel:通信连接信道,降低TCP连接开销
  • Virtual host:虚拟主机
  • Exchange:交换机,message 到达 broker 先存放到交换机
  • Queue:队列,消费者从这里获取消息
  • Binding:交换机与队列之间的虚拟连接,用于消息分发

6.RabbitMQ工作模式

从官网抄过来的:
在这里插入图片描述

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mq_timedsend是在glibc中的一个系统调用接口,用于向一个消息队列发送消息。在glibc中,有两个调用mq_timedsend系统调用的接口:mq_send和mq_timedsend。这些接口最终会通过linux内核系统调用mq_timedsend进入内核。具体的系统调用源码可以在glibc源码中找到,其格式如下: SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr, size_t, msg_len, unsigned int, msg_prio, const struct __kernel_timespec __user *, u_abs_timeout) { struct timespec64 ts, *p = NULL; if (u_abs_timeout) { int res = prepare_timeout(u_abs_timeout, &ts); if (res) return res; p = &ts; } return do_mq_timedsend(mqdes, u_msg_ptr, msg_len, msg_prio, p); } 这段代码定义了mq_timedsend系统调用的参数和返回值。其中,mqdes是消息队列的描述符,u_msg_ptr是指向消息内容的指针,msg_len是消息的长度,msg_prio是消息的优先级,u_abs_timeout是超时时间。如果设置了超时时间,会调用prepare_timeout函数进行超时时间的准备,并传递给do_mq_timedsend函数进行实际的消息发送操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux mq在内核的发送、唤醒流程简介](https://blog.csdn.net/u012075739/article/details/127173875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值