前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从没有人能把MOM异步通信,消息中间件,消息队列?给一次性讲清

从没有人能把MOM异步通信,消息中间件,消息队列?给一次性讲清

作者头像
愿天堂没有BUG
发布2022-10-28 15:23:52
6220
发布2022-10-28 15:23:52
举报
文章被收录于专栏:愿天堂没有BUG(公众号同名)

MOM异步通信

在微服务架构中,使用REST和RPC的方式最大的问题就是请求/响应模式的通信模式可能导致服务之间调用的可用性降低,客户端与服务端需要同时在线,双方都需要知道对方的URL地址,或者服务消费者需要通过某种发现机制来定位服务实例的地址。

MOM(Message Oriented Middleware)是面向消息的中间件,使用消息提供者来协调消息传送操作。这种松耦合的通信机制有助于降低客户端和远程服务之间的依赖性。

消息中间件概述

消息中间件通常也被称为消息队列,是系统内部通信的核心机制。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列优势。

消息中间件的常用概念

● Broker:消息服务器,作为Server提供消息核心服务。

● Producer:消息生产者,业务的发起方,负责生产消息并传输给Broker。

● Consumer:消息消费者,业务的处理方,负责从Broker获取消息并进行业务逻辑处理。

● Topic:主题,它是发布订阅模式下的消息统一汇集地。不同生产者向Topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播。

● Queue:队列,在点对点模式下,特定生产者向特定Queue发送消息,消费者订阅特定的Queue完成指定消息的接收。

● Message:消息体,根据不同通信协议定义的固定格式进行编码的数据包,可以用它来封装业务数据,实现消息的传输。

消息中间件模式

● 点对点模式:使用Queue作为通信载体,消息生产者生产消息后发送到Queue中,然后消息消费者从Queue中取出并且消费消息。

● 发布订阅(广播)模式:使用Topic作为通信载体。消息生产者(发布者)将消息发布到Topic中,同时有多个消息消费者(订阅者)消费该消息。和点对点方式不同,发布到Topic的消息会被所有订阅者消费。

消息中间件流派

当 前 , 市 面 上 流 行 的 消 息 中 间 件 有 RabbitMQ 、 RocketMQ 、ActiveMQ、Kafka、ZeroMQ等。它们有各自擅长的领域,分属不同的流派。下面我们通过不同消息队列的流派来了解不同消息中间件的世界观。

● 基于标准规范的消息队列

JMS(Java Message Service)是一套JMS API标准规范。JMS是由Sun公司提出的早期的消息标准,旨在为Java应用提供统一的消息操作,使用Java的世界观通过定制标准来达到统一规范的效果。JMS已经成为Java Enterprise Edition的一部分。从使用的角度看,JMS和JDBC扮演着差不多的角色,用户都可以根据相应的接口与实现了JMS的服务进行通信。

ActiveMQ是Apache的开源项目,是基于JMS规范开发的一个典型的消息队列,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。在中小型项目中用于解耦和异步操作时,可考虑ActiveMQ,简单易用,对队列数较多的情况支持不好。

● 基于标准协议的消息队列

RabbitMQ是这一流派的典型代表,它是使用Erlang编写的开源的消息队列,本身支持很多协议:AMQP、XMPP、SMTP、STOMP,也正因如此,使得它变得非常重量级,更适合于企业级的开发。它同时实现了Broker架构,核心思想是生产者不会将消息直接发送给队列,消息在发送给客户端时先在中心队列排队。对路由、负载均衡、数据持久化都有很好的支持。

AMQP的全称为Advanced Message Queuing Protocol,它是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端和中间件不同产品、不同开发语言等条件的限制。这种模式的消息中间件的主要优点是标准、可靠、通用。

在AMQP中,消息路由和JMS存在一些差别,在AMQP中增加了Exchange(交换机)和Binding(绑定)的角色。生产者将消息发送给Exchange,Binding决定Exchange的消息应该发送到哪个队列,而消费者直接从队列中消费消息。队列和Exchange的绑定关系由消费者来决定。AMQP逐渐成为消息队列的一个标准协议。

● 基于TCP的私有二进制的消息队列

这个流派最典型的代表就是Kafka了,Kafka遵循了一般消息队列的结构。它简化了消息队列功能模型,仅仅提供了一些最基础的消息队列相关功能,但是大幅度优化和提升了吞吐量。这个流派有一个Broker(消息代理)角色,也就是说,Kafka需要部署一套服务器集群,每台机器上都有一个Kafka Broker进程,这个进程负责接收请求、存储数据、发送数据。Kafka的生产消费采用简单的数据流模型。

相比RabbitMQ,Kafka强调的不是提升性能和吞吐量,它关注的还是提供非常强大、复杂而且完善的消息路由功能。

RocketMQ也可以归为这个流派,RocketMQ是阿里巴巴参照Kafka设计思想使用Java实现的一套消息队列。

本文给大家讲解的内容是MOM异步通信,消息中间件(消息队列?)

  1. 下篇文章给大家讲解的内容是MOM异步通信,消息中间件的使用场景
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

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

本文分享自 愿天堂没有BUG 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MOM异步通信
  • 消息中间件概述
  • 本文给大家讲解的内容是MOM异步通信,消息中间件(消息队列?)
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档