基于实际应用对mq消息队列的理解和介绍

概要

对消息中间件原理和架构进行简单介绍。了解其使用场景,并对特殊情况可能产生的问题进行分析。

一、什么是消息中间件

消息中间件MQ(message queue)是一种软件系统,基于队列和消息传递技术,用于在网络环境中提供同步或异步、可靠的消息传输。
消息中间件支持在不同平台、协议、编程语言、应用程序、硬件和软件平台之间的通信。其核心机制包括消息传递和消息排队,允许应用程序组件之间进行松耦合的通信和协作。消息中间件的主要功能是在应用程序之间提供异步、可靠的消息传送,确保消息即使在接收者不可用时也能可靠传递。此外,消息中间件还提供了一组通用的API和消息传递语义,如确保消息一定会被传递且仅传递一次。
以收发短信的短信银行为例,如图所示:
短信消息中心概览
如果由短信银行直接对用户进行短信分发,对应用来说负载过大,比如一次群发就要占用大量的线程,没有分法任务时又处于长时间空闲状态。用户上行短信也是如此,大量的短信对短信银行数据库和应用都带来了巨大的压力。
如果在中间加个消息中心组件,让相应的短信排队等待处理,虽然对用户来说不一定能同时收到短信,但相差时间不大,且宝贵的服务器资源也能得到充分均衡调用。

二、消息中心在实际商业场景的应用

双中心部署架构

  • 如图所示,此服务目录采用双活部署模式,主中心4台,辅中心3台。服务目录是直接与用户交互的应用,他们构成zookeeper并实现同步,用于对消息中心6个分组接口的注册和调用。
  • 消息中心为双中心六分组,每中心有三分组,每组主备模式部署。消息生产者随机将消息发布到消息中心的集群中;消息消费者遍历所有消息中心集群,获取消息。

可见这样的微服务部署结构属于生产者、消费者、服务注册中心的SOA架构,服务目录相当于soa架构中的服务注册中心,消息中心对上面注册的服务的调取和使用起到派发的功能,并帮助消息生产者找到对应的消息消费者。
SOA架构

三、消息中间件的好处

  1. 流量削峰
    假如用户不过消息中心,可能在峰值的时候同事有上万条消息或请求发给服务器,这时候如果只考虑即使处理的话,服务器会有大量现场,很容易造成宕机。
    这时候引入消息中间件,就能用较长的时间慢慢分法下去,让服务器峰值降低,减少服务器硬件资源使用量。
    在这里插入图片描述

  2. 系统解耦
    假设你有一个系统A,这个系统会产出一个数据,现在下游有系统B和系统C需要这个数据。这时仅需把接口暴露给B、C系统即可。
    但在开发过程中,可能有多了n个系统需要使用这个数据,这样对系统A来说,它的下游系统有n个,如果要更新数据结构就要通知n个系统,十分繁琐。有消息中心就能专事转办,交给mq去处理就好了。

  3. 实现分布式系统架构
    理论上支持消息无限堆积;可以对系统进行扩展。

四、常见的消息中间件

  1. RabbitMQ
    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
    参考百度百科
  2. Kafka
    Apache下的一个子项目,使用scala实现的一个高性能分布式Publish/Subscribe消息队列系统,它是完全的分布式系统:Broker、Producer、Consumer都原生自动支持分布式,依赖zookeeper自动实现负载均衡;Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
    在这里插入图片描述

“Producer” 负责发布消息到Kafka broker
“Consumer” 消息消费者,向Kafka broker读取消息的客户端。
“Consumer Group” 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

小结

本文结合mq在实际使用场景中的应用,对mq消息中间件的功能和使用进行了介绍,对mq的意义和作用进行相应的解析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值