DevelperWorks的这个文章可以一读,讲的是一种新型的消息中间件标准及其实现。这个消息中间件标准是AMQP(Advanced Message Queuing Protocol,即高级消息队列协议)。而这个实现是指apahce的Qpid项目。

文章写到:

通信是一个基本的需求,正如人与人之间需要交流一样,比较大型的软件系统也往往需要内部或者外部通信。

在系统间通信最基础的通信方式是 socket,但 socket 比较底层。使用起来非常不易。如果需要一些高级特性,需要很多的编程负担。

与 socket 的原始对应,企业级的应用软件往往有着各种各样从简单到复杂的通信需求,表现为不同的通信模型。常见的有:

  • 点对点:A 发消息给 B。
  • 广播:A 发给所有其他人的消息
  • 组播:A 发给多个但不是所有其他人的消息。
  • Requester/response:类似访问网页的通信方式,客户端发请求并等待,服务端回复该请求
  • Pub-sub:类似杂志发行,出版杂志的人并不知道谁在看这本杂志,订阅的人并不关心谁在发表这本杂志。出版的人只管将信息发布出去,订阅的人也只在需要的时候收到该信息。
  • Store-and-forward:存储转发模型类似信件投递,写信的人将消息写给某人,但在将信件发出的时候,收信的人并不一定在家等待,也并不知道有消息给他。但这个消息不会丢失,会放在收信者的信箱中。这种模型允许信息的异步交换。
  • 其他通信模型。。。

除了各类不同的通信模型之外,系统间的通信还有其他一些需要考虑的问题。比如企业级应用往往有巨量的数据需要交换,对可靠性的要求也比较高。 比如一个分布式的财务处理软件,每时每刻都有成千上万的用户在使用,需要产生难以想象的海量消息,每个消息可能都关乎某人的银行账户等关键信息,如果丢失 将带来巨大损失。编写这样一个通信中间件不是一件容易的事情,即使编写出来,假如需要和其他的软件系统交互信息,又需要大量的格式转换,接口迁移等工作。

为了解决以上这些问题,人们开发出了很多的软件产品和协议。从早期的 RPC,到复杂的面向消息的中间件 (MOM),再到 JMS,人们取得了很多的进步,但是这些技术还是存在各自的问题。

RPC,Corba 等技术是同步的,即调用者必须等待对方的回复,这意味着调用者必须了解接收者,是一种紧耦合的模型。紧耦合意味着不灵活,而在软件行业唯一不变的就是变化,当需求和环境发生变化时,紧耦合的应用修改代价非常高。

为此众多的消息中间件产品应运而生,打破了消息生产者和消费者之间的紧耦合关系。但中间件产品是由各个厂商自行定义和实现的,在整合企业级应用的时候,人们发现各种应用往往采用了不同的技术和中间件产品,要想让这些产品互通消息,又是一件非常困难的事情。

JMS 是标准化的一种努力,但其缺点在于 JMS 是 J2EE 的标准,假如不是采用 Java 技术实现的产品,想使用 JMS 还是比较麻烦的。

因此即便到了今天人们还是希望有一款功能强大,平台 / 语言无关,标准化的面向消息的中间件产品。

假如这正是您时时刻刻所想的问题,那么 Qpid 便是您值得了解的一款开源软件。它实现了可靠复杂的通信中间件,支持多种通信模型,效率高,平台语言无关,而且实现了业界的通信标准 AMQP。

AMQP 是 Advanced Message Queuing Protocol,即高级消息队列协议。和前面罗列的技术不同,AMQP 是一个标准化的消息中间件协议。她的理想是让不同语言,不同系统的应用互相通信,并提供一个简单统一的模型和编程接口。这样,人们就可以采用各种语言和平 台来实现自己的应用,当需要和其他系统通信时,只要承认 AMQP 协议即可。

举个不太自然的例子吧。。。

世界各地的人们由于地理和历史的原因,使用着各种不同的语言,相互交流十分不易。AMQP 类似一架自动翻译机,当我用中文对它说了什么之后,假如一个英语世界的人想听的话,可以听到 英文版精确的一字不差的翻译。

此外这个翻译机还提供其他很多好处,比如中国和美国有 12 小时的时差,假如我现在希望和某个美国人通话,他必须半夜爬起来,或者我必须等到他起床,但通过这台机器,我说完就行了,那个美国人起床后就会听到的。我很放心,这句话绝不会丢掉,也绝不会走样;

我其实可以不关心有多少人来听,假如有更多的人都想听,那么他们也可以随时听到。

假如我只想让部分人听到,还可以加密认证;

假如有些人不想听,有些人想听,那么这台翻译机也能知道谁想听,而不会将我的声音发给不想听到的人。

这种交流方式和体验,作为一个人类我还不曾享受过,但是 AMQP 已经为 众多的计算机软件提供了这种服务。

AMQP 来自 JPMorgon,最初只是这个财大气粗的投行内部使用的消息中间件。发起人 John O'Hara 很有气魄,他说“从 1996 年开始到 2003 我一直在等这样一个标准,但始终没有等到,我已经等不下去了”,并且“投行对这类标准的需求最迫切,而银行又从来不缺乏技术专家” ,所以他自己开发了一个。我想一个人如果想成就什么事,就需要这样的英雄气概吧。

因为他的努力,AMQP 从金融界迅速推广到整个计算机行业,参与者包括了很多 IT 巨头。虽然今天 AMQP 依旧是一个草案,但值得我们拭目以待。

AMQP的架构示意:

Apache Qpid:一个AMQP的开源实现相关推荐

  1. 简要描述如何安装配置apache的一个开源Hadoop

    title: '''简要描述如何安装配置apache的一个开源Hadoop''' date: 2020-05-14 10:54:44 tags: 1)使用 root 用户登录 2)修改 IP [ifc ...

  2. Apache Qpid 认证绕过漏洞

    漏洞名称: Apache Qpid 认证绕过漏洞 CNNVD编号: CNNVD-201303-222 发布时间: 2013-03-13 更新时间: 2013-03-13 危害等级:    漏洞类型: ...

  3. Apache Qpid Broker-J 第4章 概念

    第4章 概念 原文链接:https://qpid.apache.org/releases/qpid-broker-j-8.0.6/book/Java-Broker-Concepts.html 4.1 ...

  4. apache madlib 教程_Apache顶级开源项目——机器学习库MADlib简介与应用实例

    原标题:Apache顶级开源项目--机器学习库MADlib简介与应用实例 Apache MADlib是Pivotal与UCBerkeley合作的一个开源机器学习库,提供了精确的数据并行实现.统计和机器 ...

  5. GitHub 标星 10,000+,Apache 顶级项目 ShardingSphere 的开源之路

    [CSDN 编者按]几天前,当 GitHub 全球产品技术生态总经理 Michael Francisco 谈到中国开发者已经成为 GitHub 上最活跃的群体时,有开发者提出数量之后质量也要跟上.的确 ...

  6. ICDE 2022 | Apache ShardingSphere: 一个功能全面和可插拔的数据分片平台(附论文)

    相信大家在网上抢购时遇到过网页无法正常访问的情况,一部分原因可能是数据库无法很好地应对不断增加的并发访问.如何有效地解决数据库现有的这些缺陷呢?数据分片是一个可选的方案.本篇文章将为大家解读由重庆大学 ...

  7. Apache RocketMQ 荣获 2021 中国开源云联盟优秀开源项目

    为推动国内开源生态产业发展,中国开源云联盟(China Open Source Cloud League,简称"COSCL")组织开展了 2021 杰出开源贡献者.优秀开源项目.最 ...

  8. 推荐一个Python的开源小工具大合集!

    今天推荐一个python的开源项目 python写的各种小工具,涉及的知识比较多,包括pyqt5.简单的爬虫.文本匹配.计算器.二维码制作.端口扫描器等等. 开源地址 https://github.c ...

  9. 数据3分钟丨Apache Doris谴责DorisDB违背开源精神;HC2021下周召开;openGauss训练营第二期圆满落幕

    数据 3 分钟 由 ACDU (中国 DBA 联盟) 与墨天轮联合出品的全新视频节目上线啦-三分钟带你来了解数据行业动态,节目内容主要包含数据行业最新的产品发布.公司大事件.行业新闻等. 本期内容概览 ...

最新文章

  1. ajax跨界表单,ajax使用jsonp解决跨域问题
  2. Spring定时器的使用-多实例下定时重建索引
  3. iOS架构-自动打包并上传到App Store(python)(21)
  4. 1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)
  5. Java 字符的验证
  6. 认知空间是什么意思_百变立体空间 搭建创意世界
  7. linux 脚本 if判断 o,shell脚本常用脚本:if判断
  8. 知识图谱开源社区_您需要了解的关于开源社区中的倦怠的知识
  9. yii2解决资源插件路径不对应问题
  10. ISO50001认证咨询,新版标准更加强调持续改进能源绩效主要体现在以下方面
  11. excel文件修复工具_DBF Doctor下载_DBF文件修复软件官方版下载[管理工具]
  12. Scarpy源码分析6
  13. 《软件工程》思维导图
  14. 大数据(3i)Sqoop安装和操作
  15. vue3中的Suspense
  16. 大数据面试技巧——个人总结(持续更新)
  17. 毕业设计-基于计算机视觉的垃圾分类识别系统
  18. 事业单位计算机和办公软件基础知识,计算机基础知识(事业单位计算机考试常考知识点总结)...
  19. trainging contest#2(2011成都现场赛)G BY bly
  20. 关于计算机行业未来的发展

热门文章

  1. 如何在现代C ++中实现经典排序算法?
  2. Python类继承对象
  3. 系统修复对电脑的影响有哪些
  4. 简易新闻客户端android
  5. android 5.0 字体,QC8916 修改系统默认字体(Android 5.0)
  6. fun php,fun.php
  7. anaconda安装numpy_Windows安装cpu版pytorch和tensorflow
  8. 程序猿必须要知道的一个内容:客户端+服务端一(源码解析、建议收藏)
  9. mysql之配置mysql使其可用python远程控制
  10. 运行中的linux备份系统盘,怎样使用ghost对linux进行系统备份?