消息中间件的介绍

18ecf9a9d9f749948b7143cb521a0b61.gif消息中间件(message oriented middleware)是指支持与保障分布式应用程序之间同步/异步收发消息的中间件。消息是分布式应用之间进行数据交换的基本信息单位,分布式应用程序 之间的通信接口由消息中间件提供。其中,异步方式指消息发送方在发送消息时不必知道接收方的状态,更无需等待接收方的回复,而接收方在收到消息时也不必知 道发送方的目前状态,更无需进行同步的消息处理,它们之间的连接完全是松耦合的,通信是非阻塞的,这种异步通信方式是由消息中间件中的消息队列及其服务机 制保障的。一般地,实时性要求较高的业务采用同步方式处理,实时性要求不高的业务采用异步方式进行处理。消息中间件已广泛应用于各类分布式应用系统中。

 

 

消息起源于分布式操作系统进程通信模型和分布式应用互操作技术的研究。1980年代,随着开放系统互连参考模型OSI的兴起,作为开放系统网络模式中底层 的包交换通信范型的一种自然扩充,分布式系统消息机制的研究和应用得到极大的发展,而统一处理消息发送、接收和管理的消息中间件的概念和平台开始出现。 1980年代后期,IBM公司推出了消息中间件产品MQSeries,成为消息中间件成熟的一个标志。

 

进入1990年代,由于应用需求的推动,消息中间件技术得到极大的发展,并在世界范围内涌现出大量的消息中间件产品。为了有助于消息中间件技术的传播,由 众多消息中间件厂商、用户和咨询机构组成了消息中间件协会(MOMA),MOMA是一个非盈利机构,旨在推动消息技术在跨平台、跨层次的分布计算中的广泛 应用。国际对象管理组织(Object Management Group,简称OMG)制定了公共对象服务标准(Common Object Service Specifiaction,简称COSS),其中对消息服务进行了规范。

 

进入21世纪,消息中间件技术得到进一步的发展。在规范化方面,由于J2EE技术的广泛应用,J2EE的消息服务规范JMS(Java Message Service)得到消息中间件厂商的广泛采纳,并逐渐成为消息中间件的事实标准,与此同时,Web服务技术的兴起,与Web服务相关的标准体系得到发展,在消息方面,W3C组织定义了Web服务的可靠消息传送规范(WS-ReliableMessaging)。

 

目前,企业信息系统开始从部门级应用向企业级、跨企业集成的方向转变,在这一过程中,传统的消息中间件体系架构也暴露出它的局限性。传统的消息中间件通常 采用点对点的消息传输结构,即在发送方对消息进行打包时需要显明地标注接收方的地址。因此,尽管消息的接收方和发送方是松耦合连接的,相互通信不必保持同 步,但由于在消息中必须绑定接收方地址,导致在广域、大型应用系统中使用消息中间件不够灵活,系统扩展比较困难。为了增加消息发送方和接收方之间对地址的 透明性,1990年代末期以后,消息中间件开始向发布/订阅架构转变,并成为企业应用集成中间件的一种核心机制,而基于发布/订阅架构的消息中间件通常称 为发布/订阅消息中间件(Publish/Subscribe Middleware,简称P/S MOM)或消息代理(Message Broker),以与传统的消息中间件相区别。目前比较典型的消息中间件包括IBM WebSphere MQSeries、Tibco TIB/Rendezvous和Microsoft MSMQ等。

 

传统的点对点消息中间件通常由消息队列服务、消息传递服务、消息队列和消息应用程序接口API组成,其典型的结构如图6.1所示。

 

 

消息中间件的基本工作原理为:在消息发送方,消息发送者调用发送消息的API函数,将需要发送的消息经消息队列服务存储到发送消息队列中;通过双方消息传 递服务之间的交互,经消息队列服务将需要发送的消息从发送队列取出,并送到接收方;接收方再经它的消息队列服务将接收到的消息存放到它的接收消息队列中; 在消息接收方,消息接收者调用接收消息的API函数,同样经过消息队列服务,将需要的消息从接收队列中取出,并进行处理。消息在发送或接收成功后,消息队 列服务将对相应的消息队列进行管理。

 

在基于消息代理的分布式应用系统中,消息的发送方称为出版者,消息的接收方称为订阅者,不同的消息通过不同的主题进行区分。出版者向消息代理出版其他应用 系统感兴趣的消息,而订阅者从消息代理接收自己感兴趣的消息,出版者和订阅者之间通过消息代理进行关联。消息代理的基本结构如图6.2所示。

 

消息中间件的比较-转载

 

 

消息代理具有很好的灵活性和可扩展性,并支持主动、实时的信息传递方式,当消息发布者有动态更新的数据产生时,消息代理会通过事件的发布主动通知消息订阅 者存在新的数据可用,而无需消息订阅者进行频度无法确定的查询。消息代理适合于具有实时性、异步性、异构性、动态性和松耦合的应用需求。

 

消息代理的工作原理为:消息发布者和订阅者分别同消息代理进行通信。消息发布者将包含主题的消息发布到消息代理;消息订阅者向消息代理订阅自己感兴趣的主 题。消息代理对双方的主题进行匹配后,不断将订阅者感兴趣的消息推(Push)给订阅者,直到订阅者向消息代理发出取消订阅的消息。

 

消息代理实现了发布者和订阅者在时间、空间和流程三个方面的解耦:

时间解耦—-发布方和订阅方无需同时在线就能够进行消息传输,消息中间件通过存储转发提供了这种异步传输的能力;

空间解耦——发布方和订阅方都无需知道对方的物理地址、端口,甚至无需知道对方的逻辑名字和个数;

流程解耦——发布方和订阅方在发送和接收数据时并不阻塞各自的控制流程。

 

从消息中间件的基本功能来看,无论是点对点消息中间件还是消息代理,其体系结构都是非常清晰简单的。但由于分布式应用及其环境的多样性和复杂性,导致了消息中间件的复杂性。

 

消息中间件的复杂性主要体现在下面几个方面:

消息中间件需要为分布在企业各个物理服务器上的应用系统提供消息服务,而这些服务器可能采用不同硬件平台,相互之间可能通过不同的网络协议进行连接,这就要求消息中间件能够跨越不同的网络和硬件平台;

分布式应用可能采用不同开发语言或工具实现,因此需要消息中间件为这些应用程序提供各类应用程序接口;

由于企业网络结构的复杂性和分布式应用传输消息的多样性要求,在分布式应用之间传递的消息往往需要在消息中间件之间进行多次传输才能到达接收方,因此要求消息中间件具有存储转发或消息路由的能力;

对消息传输的安全性、事务性、时限等质量要求,均需要消息中间件系统进行相应的处理;

为了保证消息不会因为网络或服务器等物理故障而在传输过程中丢失,往往需要消息中间件具备消息的持久存储能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/291452.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js 中使用 Element UI 实现异步加载分页列表

Vue.js 中使用 Element UI 实现异步加载分页列表 在前端开发中,我们常常需要展示大量数据,并提供分页浏览的功能。本篇博客将介绍如何使用 Vue.js 和 Element UI 组件库创建一个简单的异步加载分页列表。 技术栈 Vue.jsElement UIJavaScript 组件结构…

Navicat里放大、缩小字体的快捷方法

我是偶然误触键盘把字体缩小了,研究以后发现的这个快捷键,分享给大家。 方法:按住【CtrlShift】组合键,再拖动鼠标滚轮,就可以缩放字体了。 缩小效果: 放大效果:

轻量级web开发框架Flask本地部署及无公网ip远程访问界面

文章目录 前言1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何在本地安装Flask,以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架,采用P…

Matlab论文插图绘制模板第131期—函数等高线图

在之前的文章中,分享了Matlab函数折线图的绘制模板: 函数三维折线图: 函数网格曲面图: 函数曲面图: 进一步,再来分享一下函数等高线图。 先来看一下成品效果: 特别提示:本期内容『数…

FPGA模块——以太网(1)MDIO读写

FPGA模块——以太网MDIO读写 MDIO接口介绍MDIO接口代码(1)MDIO接口驱动代码(2)使用MDIO驱动的代码 MDIO接口介绍 MDIO是串行管理接口。MAC 和 PHY 芯片有一个配置接口,即 MDIO 接口,可以配置 PHY 芯片的工…

数字IC与模拟IC到底哪个更适合你?一文为你讲清楚(内附学习视频)

选数字IC还是模拟IC? 这是很多同学进入IC行业的一个难题,后台也有很多同学问模拟IC和数字IC的区别。 本文就从大家比较关心的内容入手,分析这两个方向的异同。(文末有免费学习视频哦~) 这里放个入口:IC入…

国产低成本Wi-Fi SoC解决方案芯片ESP8266与ESP8285对比差异

目录 ESP8266与ESP8285对比差异微信号:dnsj5343ESP8285简介ESP8285 主要特性Wi-Fi特性射频模块CPU特性硬件软件 ES8285 8266通用开发板 ESP8266与ESP8285对比差异 ESP8285相当于在ESP8266基础上多加了1/2MB Flash, ESP8285与ESP8266同用一套SDK&#xf…

基于vue与three.js,监听FPX(Stats类使用)

第一步,引入stats类并new出来 import Stats from three/examples/jsm/libs/stats.module.js; data(){return {stats : new Stats(),} } 第二步,添加dom mounted() {this.init3D();this.animate();window.addEventListener("keydown", this.…

AIGC绘画关键词 - 神兽类(一)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

[安洵杯 2019]Game复现

[安洵杯 2019]Game IDA64打开 开了混淆,控制流平坦化,可以使用deflat.py进行去除。 要去除的有多个函数,再进行多次重复去除后可以得到 代码不多,慢慢分析,前面是一些生成数独以及检查。 直接看check部分&#xff0c…

3. 创建型模式 - 生成器模式

亦称: 建造者模式、Builder 意图 生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 问题 假设有这样一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象…

内网渗透:拿下一台内网主机后如何继续攻击拿下域控主机

目录 #### 域的定义:将网络中的多台计算机在逻辑上组织到一起,进行集中管理。 域控攻击目标 1. 判断当前主机是否在域中 windows系统的三种登录方式 NTLM协议 从上篇文章拿下10.0.1.4这台服务器后,发展对内网进行攻击,打穿这…