前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >消息队列简介(MQ)

消息队列简介(MQ)

作者头像
终身幼稚园
发布2019-07-19 16:52:16
1.8K0
发布2019-07-19 16:52:16
举报
文章被收录于专栏:终身幼稚园终身幼稚园

一、什么是消息队列

消息队列是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

二、队列的特点

  • 先进先出
  • 发布订阅
  • 持久化
  • 分布式

三、消息队列的优势

在现代云架构中,应用程序被分解为多个规模较小且更易于开发、部署和维护的独立构建块。消息队列可为这些分布式应用程序提供通信和协调。

消息队列可以显著简化分离应用程序的编码,同时提高性能、可靠性和可扩展性。此外,您还可以采用扇出设计模式将消息队列与发布/订阅消息收发结合起来。

1.提高性能 消息队列支持异步通信,这意味着创建和处理消息的终端节点将与队列进行交互,而不是彼此交互。创建器可以将请求添加到队列中,无需再等待这些请求接受处理。处理器仅在消息可用时才会处理消息。系统中的任何组件都不会停下等待其他组件,从而优化了数据流。

2.增强可靠性 队列可永久保留您的数据,并减少系统的不同部件离线时发生的错误。通过利用消息队列分离不同的组件,可以提高容错性。即使系统的某一部分无法访问,其他部分也仍可继续与队列进行交互。队列本身也可以进行镜像,以提供更高的可用性。

3.可拓展性 消息队列可根据您的需要精确扩展。当工作负载到达峰值时,应用程序的多个实例都可以将请求添加到队列,而且不会产生冲突。随着队列因这些传入请求的增多而越来越长,您可以将这些工作负载分发给一组处理器。创建器、处理器和队列本身都可以按需扩展和缩减。

4.分离解耦 消息队列消除了组件之间的依赖关系,并显著简化了分离应用程序的编码。软件组件不必承担通信代码的重压,而是可以在经过设计后执行离散的业务功能。

无论您使用的是整体式应用程序、微服务还是无服务器架构,消息队列都是一种简单且出色的应用程序分离方法。

四、几种常见的MQ队列

1.RabbitMQ

官网: http://www.rabbitmq.com/ 开发语言: Erlang 支持客户端语言言: Erlang,java,Ruby等 协议: AMQP, STOMP, XMPP, SMTP 消息推拉模式: pull/push均支持 数据可靠性: 保证数据不丢,有Slave用作备份 单机吞吐量: 万级 持久化能力: 内存, 文件

RabbitMQ是一个消息传递代理—消息传递的中介。它为您的应用程序提供了一个发送和接收消息的公共平台,并为您的消息提供了一个安全的地方,直到收到消息为止。它的特性包括可靠性、高可用性、集群和联合。RabbitMQ附带一个易于使用的管理UI,允许您监视和控制消息代理的各个方面。几乎任何您能想到的语言都有RabbitMQ客户机。

2.RocketMQ

官网: https://rocketmq.incubator.apache.org/ 开发语言: Java 支持客户端语言: Java, C++, Go 协议: JMS,MQTT 消息推拉模式: pull/push均支持 数据可靠性: 支持异步实时刷盘,同步刷盘,同步复制,异步复制 单机吞吐量:十万级 持久化能力: 磁盘文件

其中

NameServer: 为 producer 和 consumer 提供路由信息 Producer: 为消息生产者,生产者的作用就是将消息发送到MQ,生产者本身既可以产生消息 Consumer: 为消息消费者,消费 MQ 上的消息的应用程序就是消费者 Broker: RocketMQ系统的主要角色,及队列。Broker接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备。

Apache RocketMQ是一个低延迟、可靠、可伸缩、易于使用的消息中间件,诞生于阿里巴巴庞大的消息业务。它提供的各种功能如下:

  • 发布/订阅和P2P消息传递模型
  • 在同一队列中可靠的FIFO和严格的顺序消息传递
  • 支持pull和push模式
  • 单一队列百万消息堆积能力
  • 支持各种消息传递协议。例如JMS、MQTT等。
  • 功能丰富的管理仪表板的配置,指标和监测
  • 分布式高可用的部署架构,满足至少一次消息传递语义
  • 提供 docker 镜像用于隔离测试和云集群部署

3.ActiveMQ

官网: http://activemq.apache.org/ 开发语言: Java 支持客户端语言: Java, .NET, C++ 等 协议: OpenWire, STOMP, REST, XMPP, AMQP 消息推拉模式: pull/push均支持 数据可靠性: master/slave 单机吞吐量:万级 持久化能力: 内存, 文件, 数据库

p2p模式:

pub/sub模式:

Apache ActiveMQ是最流行、功能最强大的开源消息传递和集成模式提供者。Apache ActiveMQ速度快,支持许多跨语言客户机和协议,具有易于使用的企业集成模式和许多高级特性,同时完全支持JMS 1.1和J2EE 1.4。

4.Kafka

官网: http://kafka.apache.org/ 开发语言: Java & Scala 支持客户端语言: Java, Scala 等 协议:自有协议 消息推拉模式: pull 数据可靠性: 数据可靠,并有replication机制,有容错容灾能力 单机吞吐量:十万级 持久化能力: 磁盘文件,可以做到无限消息堆积

内部结构图:

如上图所示,一个典型的kafka集群中包含若干producer,若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干consumer group,以及一个Zookeeper 集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。


喜欢可以关注公众号: 终身幼稚园

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 终身幼稚园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是消息队列
  • 二、队列的特点
  • 三、消息队列的优势
  • 四、几种常见的MQ队列
    • 1.RabbitMQ
      • 2.RocketMQ
        • 3.ActiveMQ
          • 4.Kafka
          相关产品与服务
          消息队列 CMQ 版
          消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档