红米note5a 屏幕 天马5a重启后屏幕上下反转怎么办

分布式(13)
初识消息中间件
维基百科上对于消息中间件的定义是&Message-oriented middleware(MOM) is software infrastructure focused on sending and receiving messages between distrubuted systems&。解释起来就是消息中间件是在分布式系统中完成消息的发送和传递的基础软件。看张图来更直观地理解消息中间件:
看到消息中间件有两个好处:
应用A和应用B都和消息中间件打交道,这两个应用之间并不直接联系,这样就完成了解耦,目的是希望收发消息的双方彼此不知道对方的存在,也不受对方的影响,所以将消息投递给接收者实际上都采用了异步的方式。
透过示例看消息中间件对应用的解耦
以苹果的App Store为例吧,App Store有一个功能:用户充值成功后向用户手机发送一条短信,算是一个安全选项。最直观的,我们会这么实现:
然后,我们需要把用户付款的信息(用户名、时间、IP等数据)传给安全系统,安全系统会根据安全策略进行相关的判断和处理,因此结构变成:
这么看起来还好,那么如果再增加一些要被调用的系统呢?比如:
这会让付款系统变得非常复杂,每增加一个在付款成功之后需要调用的系统,就需要修改付款系统来进行相关的调用。优雅一点的实现是把这个付款成功后的服务调用变为一种可扩展的配置,甚至可以动态生效,但这只能降低变更时的开发和部署成本,并没有降低复杂性。付款系统被迫要依赖非常多的系统。
引入消息中间件进行服务解耦
可以考虑一下,从付款的角度看,这些系统是付款系统必须依赖的吗?答案是否定的,付款系统只需要验证用户账号、付款账号、付款密码的合法性,所以付款系统依赖的是能够系统用户账号、付款账号、付款密码的系统,而上图中的系统其实都不是付款系统必须依赖的系统。相反,这些系统都是必须依赖付款系统的,因为它们都关心付款是否成功。
在这样的场景中,我们需要通过消息中间件把上面的结构解耦,上面结构中的服务调用将会被固定格式的消息传递所取代。付款系统负责向消息中间件发送消息,而其他的系统则向消息中间件来订阅这个消息,然后完成自己的工作,如图所示:
这样,通过消息中间件,付款系统就不需要关心到底有多少个系统需要知道付款成功这件事情了,也不用关心如何通知它们,只需要把登陆成功这件事情转化为一个消息发送到消息中间件就好了,这样,需要了解付款成功这件事情的系统自己去消息中间件订阅就行了,并且各个系统之间也是互不影响的。
JMS是Java Message Service的缩写,即Java消息服务,它是Java EE中一个关于消息的规范,而Hornetq、ActiveMQ等产品是对这个规范的实现。如果是企业内部或者一些小型的系统,直接使用JMS的实现产品是一个经济的选择,而在大型系统中有一些场景不适合使用JMS。
在大型互联网中,我们采用消息中间件可以进行应用之间的解耦以及操作的异步,这是消息中间件两个最基础的特点,也正是我们所需要的。在此基础上,我们着重思考的是消息的顺序保证、扩展性、可靠性、业务操作与消息发送一致性,以及多集群订阅者等方面的问题。当然,这些我们要思考的东西,JMS都已经想到了,先看下JMS能帮开发者做什么:
1、定义一组消息公用概念和实用工具
所有Java应用程序都可以使用JMS中定义的API去完成消息的创建、接收与发送,任何实现了JMS标准的MOM都可以作为消息的中介,完成消息的存储转发
2、最大化消息应用程序的可移植性
MOM提供了有保证的消息发送,应用程序开发人员无需了解远程过程调用(PRC)和网络/通信协议的细节,提供了程序的可移植性
3、最大化降低应用程序与应用程序之间的耦合度
由于MOM的存在,各个应用程序只关心和MOM之间如何进行消息的接收与发送,而无须关注MOM的另一边,其他程序是如何接收和发送的
JMS两种消息模型
1、点对点模型
点对点模型(Pointer-to-Pointer)类似这样:
这种模型总结几点:
(1)一个消息中间件关联多个队列生产者和消费者
(2)一条消息仅仅能被一个消费者消费
(3)多个消费者正在监听队列上的消息,那么中间件将根据先来先得的原则确定由哪个消费者接收下一条消息,如果没有消费者正在监听队列,那么消息将保留在中间件中,直至消费者连接到中间为止
(4)收到消息后消费者必须确认消息已被接收,否则中间件江认为该消息没有被接收,那么这条消息仍然可以被其他消费者接收。程序可以自动确认,不需要人工干预
(5)生产者和消费者的运行先后没有限制
(6)此模型中,消息不是自动推送给消费者的,而是要消费者中间件中请求获得
2、发布/订阅模型
发布/订阅(Publish-Subscribe)模型类似这样:
这种模型中,还是以分点的形式总结:
(1)有一个重要的概念topic,可以认为是主题
(2)生产者发布消息,消费者订阅感兴趣的消息,生产者将消息和一个特定的topic(主题)连在一起,中间件将根据消费者注册的topic,将消息传递给消费者
(3)发布/订阅模式允许多个消费者接收同一条消息,只要这些消费者注册了同一个主题
(4)消费者必须先运行,订阅主题,然后再等待生产者运行,这么点对点模型有所差别
(5)该模型中,消息会自动广播,消费者无须通过主动请求或者轮训主题的方法来获得新的消息
JMS为提供的要素
JMS为发开者提供了很多的要素,看一下比较重要的几个:
Destination
表示消息所走通道的目标定义,,用来定义消息从发送端发出后要走的通道,而不是接收方。Destination属于管理类对象
ConnectionFactory
顾名思义,用于创建连接对象,ConnectionFactory属于管理类的对象
Connection
连接接口,所负责的重要工作时创建Session
会话接口,这是一个非常重要的对象,消息发送者、消息接收者以及消息对象本身,都是通过这个会话对象创建的
MessageConsumer
消息的消费者,也就是订阅消息并处理消息的对象
MessageProducer
消息的生产者,也就是用来发送消息的对象
XXXMessage
指各种类型的消息对象,包括ByteMesage、ObjectMessage、StreamMessage和TextMessage这5种
在JMS消息模型中,根据点对点模式和发布/订阅模式,这些要素由扩展出了各自的内容:
点对点模式
发布/订阅模式
ConnectionFactory
QueueConnectionFactory
TopicConnectionFactory
Connection
QueueConnection
TopicConnection
Destination
QueueSession
TopicSession
MessageProducer
QueueSender
TopicPublisher
MessageConsumer
QueueReceiver
TopicSubscriber
JMS是一个标准,具体还是依赖实现,当前常见的JMS实现有ActiveMQ、ZeroMQ、RabbitMQ等,Kafka是一种类似JMS的实现,下一篇文章将会重点讲解一下Kafka,至于为什么,还是和以前写文章一样的原因,因为工作用,呵呵。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:83131次
积分:1274
积分:1274
排名:千里之外
转载:285篇
(1)(1)(12)(1)(3)(3)(12)(7)(68)(168)(21)消息中间件的应用场景 - 企业应用,SOA,中间件 - Java - ITeye论坛
消息中间件的应用场景
& 上一页 1
锁定老帖子
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
hahazhu1016
等级: 初级会员
来自: 上海
发表时间:&&
相关知识库:
目前单位内部系统众多,有一些互相调用数据的需求。想搭建一个中间件平台,所有应用统一像这个平台提交查询请求,然后由平台根据请求查询各系统获取数据,反传给提交查询的系统。 请问这个场景适合用消息中间件么?我查了下资料发现,消息中间件一般是单向传输,数据消费者拿到消息后好像没有和数据生产者的互动。另外对于消息的大小也有限制。我看淘宝开源的metaq限制在1m以下。那是不是如果有10几m这种的数据,就不太适合用消息中间件,那请问大家还有比较好的架构设计么?
等级: 初级会员
来自: 厦门--&北京
发表时间:&&
最后修改:
消息中间件一般两个功能,解耦和异步处理,分别举个例子吧
解耦合:
比如我们做一个微博产品中的好友系统,就很需要使用消息中间件
当我们添加一个关注的时候, 涉及以下几个子系统
推荐系统,需要根据你关注的人给你做数据分析
搜索系统,需要根据你的数据建立索引
feed系统,需要根据你关注的人,发送一条新鲜事
统计系统 用于数据统计,了解产品情况
而如果直接在加关注的流程里进行这些操作,可能带来风险,所以,会引入mq来解耦合,因此就像你说的,一般是 "单向传输" 的(当然这不是绝对的,取决于你系统复杂度),而且发往mq的数据一般都不大,比如 from_uid, to_uid 就行了,一般都不会很大,如果发送的数据不满足你的要求,这个时候,需要调用好友系统提供的接口了
异步处理:
有的时候,我们一个操作可能会耗时比较久,所以,并不会在主要业务流程里进行处理
比如,我们在删除一个用户的时候,可能会有很多关联数据的操作,为了尽快的响应以及解耦合,我们会将这个消息发送给其他系统,让它们根据需求自己处理
请登录后投票
hahazhu1016
等级: 初级会员
来自: 上海
发表时间:&&
那请问,我这种需要异步查询别的系统。 需要用什么方式来处理呢?
请登录后投票
等级: 初级会员
来自: 哈尔滨
发表时间:&&
感觉就是一个代理系统而已
请登录后投票
等级: 初级会员
来自: 深圳
发表时间:&&
请求端--&MQ--&响应端--&Webservice--&请求端& 我们的数据交换平台是采用这种方式
请登录后投票
等级: 初级会员
来自: 深圳
发表时间:&&
最后修改:
建议采用ESB产品。
消息中间件适合于异步消息传输,对于请求-响应 消息交互模式,处理起来稍微麻烦点。
ESB可能比较适合你们的系统集成情况,ESB作为消息代理和服务中介,屏蔽服务和消息的提供者地址,所有集成的系统通过ESB进行解耦。并且集成需求中如果需要采用异步消息进行通信的话,ESB接入三方MQ产品也很容易实现。
我这里有很多集成案例和产品介绍说明,楼主可以和我联系。
请登录后投票
等级: 初级会员
来自: 成都
发表时间:&&
是否可以考虑主动推送数据,把企业间多系统都共用的数据独立出来维护,有变化通过webServe同步到其它系统
请登录后投票
liujiesmart
等级: 初级会员
来自: 济南
发表时间:&&
我自己设计的一个审核反馈系统
按我的消息格式走有个callback,人工审核完了 callback通知
请登录后投票
hahazhu1016
等级: 初级会员
来自: 上海
发表时间:&&
我目前的想法是这样的,客户端A提交查询到总控Server的mq队列,Server程序监控这个mq队列,一旦有新的查询请求就将该请求转发给对应的业务系统B的mq_b队列。每个业务系统B有一个线程监控该mq_b队列,一旦拿到查询请求,即在自己的系统中将结果查询出,然后将结果发送到提交请求的客户端A所在队列mq_a。 客户端A有一个线程实时监控自己的结果mq_a队列。扫描到有结果,即将结果入库,与此同时,A在提交查询之后,就需要一直刷新自己的数据库,查看结果是否反传回来。
但是这样设计的问题是:前台在联机访问时,提交查询后,处理过程是异步的,我只能在提交了查询请求后,控制程序每秒扫描一次自己的数据库,看看是否有结果返回。 这样是不是不太好。 是否有更好的解决方案呢?
请登录后投票
hahazhu1016
等级: 初级会员
来自: 上海
发表时间:&&
dadaozei 写道请求端--&MQ--&响应端--&Webservice--&请求端& 我们的数据交换平台是采用这种方式
那请问你们的请求端,在发送请求后,如何判断结果已经返回呢?
请登录后投票
& 上一页 1
跳转论坛:移动开发技术
Web前端技术
Java企业应用
编程语言技术22578人阅读
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
AMQP在消息提供者和客户端的行为进行了强制规定,使得不同卖商之间真正实现了互操作能力。
JMS是早期消息中间件进行标准化的一个尝试,它仅仅是在API级进行了规范,离创建互操作能力还差很远。
与JMS不同,AMQP是一个Wire级的协议,它描述了在网络上传输的数据的格式,以字节为流。因此任何遵守此数据格式的工具,其创建和解释消息,都能与其他兼容工具进行互操作。
AMQP规范的版本:
0-8&&& & & 是2006年6月发布
0-9&&& & & 于2006年12月发布
0-9-1&&&& 于2008年11月发布
0-10&& && 于2009年下半年发布
1.0 draft& (文档还是草案)
AMQP的实现有:
1)OpenAMQ
AMQP的开源实现,用C语言编写,运行于Linux、AIX、Solaris、Windows、OpenVMS。
2)Apache Qpid
Apache的开源项目,支持C++、Ruby、Java、JMS、Python和.NET。
3)Redhat Enterprise MRG
实现了AMQP的最新版本0-10,提供了丰富的特征集,比如完全管理、联合、Active-Active集群,有Web控制台,还有许多企业级特征,客户端支持C++、Ruby、Java、JMS、Python和.NET。
4)RabbitMQ
一个独立的开源实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。RabbitMQ发布在Ubuntu、FreeBSD平台。
5)AMQP Infrastructure
Linux下,包括Broker、管理工具、Agent和客户端。
一个高性能的消息平台,在分布式消息网络可作为兼容AMQP的Broker节点,绑定了多种语言,包括Python、C、C++、Lisp、Ruby等。
是一个Broker,实现了RestMS协议和AMQP协议,提供了RESTful HTTP访问网络AMQP的能力。
JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。
&&&&&& JMS本身只定义了一系列的接口规范,是一种与厂商无关的 API,用来访问消息收发系统。它类似于 JDBC(Java Database Connectivity):这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的
SonicMQ,这只是几个例子。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JML 客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载 的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本 (TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流
(StreamMessage),还有无有效负载的消息 (Message)。
STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。
它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互,类似于OpenWire(一种二进制协议)。
由于其设计简单,很容易开发客户端,因此在多种语言和多种平台上得到广泛应用。其中最流行的STOMP消息代理是Apache ActiveMQ。
STOMP协议工作于TCP协议之上,使用了下列命令:
&&& * SEND 发送
&&& * SUBSCRIBE 订阅
&&& * UNSUBSCRIBE 退订
&&& * BEGIN 开始
&&& * COMMIT 提交
&&& * ABORT 取消
&&& * ACK 确认
&&& * DISCONNECT 断开
消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。
&&&&&& 在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。
&&&&&& 设计分布式应用的方法主要有:远程过程调用(PRC)-分布式计算环境(DCE)的基础标准成分之一;对象事务监控(OTM)-基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合;消息队列(MessageQueue)-构造分布式应用的松耦合方法。
&&&&&& (a) 分布计算环境/远程过程调用 (DCE/RPC)
&&&&&& RPC是DCE的成分,是一个由开放软件基金会(OSF)发布的应用集成的软件标准。RPC模仿一个程序用函数引用来引用另一程序的传统程序设计方法,此引用是过程调用的形式,一旦被调用,程序的控制则转向被调用程序。
&&&&&& 在RPC 实现时,被调用过程可在本地或远地的另一系统中驻留并在执行。当被调用程序完成处理输入数据,结果放在过程调用的返回变量中返回到调用程序。RPC完成后程序控制则立即返回到调用程序。因此RPC模仿子程序的调用/返回结构,它仅提供了Client(调用程序)和Server(被调用过程)间的同步数据交换。
&&&& & (b) 对象事务监控 (OTM)
&&&&&& 基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合,在CORBA规范中定义了:使用面向对象技术和方法的体系结构;公共的 Client/Server程序设计接口;多平台间传输和翻译数据的指导方针;开发分布式应用接口的语言(IDL)等,并为构造分布的 Client/Server应用提供了广泛及一致的模式。
&&&&&& (c) 消息队列 (Message Queue)
&&&&&& 消息队列为构造以同步或异步方式实现的分布式应用提供了松耦合方法。消息队列的API调用被嵌入到新的或现存的应用中,通过消息发送到内存或基于磁盘的队列或从它读出而提供信息交换。消息队列可用在应用中以执行多种功能,比如要求服务、交换信息或异步处理等。
&&&&&& 中间件是一种独立的系统软件或服务程序,分布式应用系统借助这种软件在不同的技术之间共享资源,管理计算资源和网络通讯。它在计算机系统中是一个关键软件,它能实现应用的互连和互操作性,能保证系统的安全、可靠、高效的运行。中间件位于用户应用和操作系统及网络软件之间,它为应用提供了公用的通信手段,并且独立于网络和操作系统。中间件为开发者提供了公用于所有环境的应用程序接口,当应用程序中嵌入其函数调用,它便可利用其运行的特定操作系统和网络环境的功能,为应用执行通信功能。
&&&&&& 如果没有消息中间件完成信息交换,应用开发者为了传输数据,必须要学会如何用网络和操作系统软件的功能,编写相应的应用程序来发送和接收信息,且交换信息没有标准方法,每个应用必须进行特定的编程从而和多平台、不同环境下的一个或多个应用通信。例如,为了实现网络上不同主机系统间的通信,将要求具备在网络上如何交换信息的知识(比如用TCP/IP的socket程序设计);为了实现同一主机内不同进程之间的通讯,将要求具备操作系统的消息队列或命名管道(Pipes)等知识。
&&&&&& 目前中间件的种类很多,如交易管理中间件、面向Java应用的Web应用服务器中间件等,而消息传输中间件(MOM)是其中的一种。它简化了应用之间数据的传输,屏蔽底层异构操作系统和网络平台,提供一致的通讯标准和应用开发,确保分布式计算网络环境下可靠的、跨平台的信息传输和数据交换。它基于消息队列的存储-转发机制,并提供特有的异步传输机制,能够基于消息传输和异步事务处理实现应用整合与数据交换。
一、&订阅杂志
&&&&& 我们很多人都订过杂志,其过程很简单。只要告诉邮局我们所要订的杂志名、投递的地址,付了钱就OK。出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中。这样我们就可以看到每一期精彩的杂志了。
仔细思考一下订杂志的过程,我们会发现这样几个特点:1、&消费者订杂志不需要直接找出版社;2、&出版社只需要把杂志交给邮局;3、&邮局将杂志送达消费者。邮局在整个过程中扮演了非常重要的中转作用,在出版社和消费者相互不需要知道对方的情况下,邮局完成了杂志的投递。
二、&发布-订阅消息模式
&&&&&& 刚刚讲了订阅杂志,下面我们会讲传统调用模式演化到发布-订阅消息模式。
&&&&&& 有些网站在注册用户成功后发一封激活邮件,用户收到邮件后点击激活链接后才能使用该网站。一般的做法是在注册用户业务逻辑中调用发送邮件的逻辑。这 样用户业务就依赖于邮件业务。如果以后改为短信激活,注册用户业务逻辑就必须修改为调用发送短信的逻辑。如果要注册后给用户加点积分,再加一段逻辑。经过 多次修改,我们发现很简单的注册用户业务已经越来越复杂,越来越难以维护。相信很多开发者都会有类似痛苦的经历。
即使用户业务实现中对其他业务是接口依赖,也避免不了业务变化带来的依赖影响。怎么办?解耦!将注册用户业务逻辑中注册成功后的处理剥离出来。
&&&&&& 再回头看看&订阅杂志&,如果没有邮局,出版社就必须自己将杂志送达所有消费者。这种情形就和现在的注册用户业务一样。我们发现问题了,在用户业务和其他业务之间缺少了邮局所扮角色。
&&&&&& 我们把邮局抽象成一个管理消息的地方,叫&消息管理器&。注册用户成功后发送一个消息给消息管理器,由消息管理器转发该消息给需要处理的业务。现在,用户业务只依赖于消息管理器了,它再也不会为了注册用户成功后的其他处理而烦恼。
注册用户的改造就是借鉴了&订阅杂志&这样原始的模式。我们再进一步抽象,用户业务就是消息的&生产者&,它将消息发布到消息管理器。邮件业务就是 消息的&消费者&,它将收到的消息进行处理。邮局可以订阅很多种杂志,杂志都是通过某种编号来区分;消息管理器也可以管理多种消息,每种消息都会有一个 &主题&来区分,消费者都是通过主题来订阅的。
发布-订阅消息模式已经呈现在我们面前,利用它可以产生更灵活、更松散耦合的系统。
1.消息(Message)
消息是MQ中最小的概念,本质上就是一段数据,它能被一个或者多个应用程序所理解,是应用程序之间传递的信息载体。
2.队列(Queue)
2.1本地队列
本地队列按照功能可划分为初始化队列,传输队列,目标队列和死信队列。
初始化队列用作消息触发功能。
传输队列只是暂存待传的消息,条件许可的情况下,通过管道将消息传送到其他的队列管理器。
目标队列是消息的目的地,可以长期存放消息。
如果消息不能送达目标队列,也不能再路由出去,则被自动放入死信队列保存。
2.2别名队列&远程队列
只是一个队列定义,用来指定远端队列管理器的队列。使用了远程队列,程序就不需要知道目标队列的位置。
2.3模型队列
模型队列定义了一套本地队列的属性结合,一旦打开模型队列,队列管理器会按照这些属性动态地创建出一个本地队列。
3.队列管理器(Queue Manager)
队列管理器是一个负责向应用程序提供消息服务的机构,如果把队列管理器比作数据库,那么队列就是其中一张表。
4.通道(Channel)
通道是两个管理器之间的一种单向点对点的的通信连接,如果需要双向交流,可以建立一对通道。
5.监听器(listner)
可靠性传输
这个特点可以说是消息中间件的立足之本,对于应用来说,只要成功把数据提交给消息中间件,那么关于数据可靠传输的问题就由消息中间件来负责。
不重复传输
不重复传播也就是断点续传的功能,特别适合网络不稳定的环境,节约网络资源。
异步性传输
异步性传输是指,接受信息双方不必同时在线,具有脱机能力和安全性。
接到消息后主动通知消息接收方。
应用程序可以把一些数据更新组合成一个工作单元,这些更新通常是逻辑相关的,为了保障数据完整性,所有的更新必须同时成功或者同时失败)。&
新产品无成功案例
所属社区/公司
社区活跃度
功能齐全,被大量开源项目使用
在Linux平台上直接调用操作系统的AIO,性能得到很大的提升
性能非常好,与MuleESB无缝整合
性能优越的商业MQ
由于Erlang语言的并发能力,性能很好
低延时,高性能,最高43万条消息每秒
支持的协议
OpenWire、STOMP、REST、XMPP、AMQP
客户端支持语言
Java、C、C++、Python、PHP、Perl、.net等
Java、C、C++、.net
Java、C、C++、Python、PHP、Perl等
python、java、php、.net等
内存、文件、数据库
内存、文件
内存、文件
内存、文件
内存、文件
内存、文件、数据库
内存、文件
在消息发送端保存
独立、嵌入
独立、嵌入
独立、嵌入
独立、嵌入
成熟稳定,开源首选
依赖容器,不适合跨语言调用
推出的时间不长,尚无使用案例,不适合跨语言调用
依赖容器,不适合跨语言调用
推出的时间不长,无成功案例,目前仅支持Java
Queue的数量大于50后,高并发下无法持续稳定的提供服务
不支持事务、集群,并且消息不能在服务端持久化&
MQ消息队列是应运松偶合的概念而产生的,主要以队列和发布订阅为消息传输机制,以异步的方式将消息可靠的传输到消费端的一种基础产品。
它被广泛的应用与跨平台、跨系统的分布式系统之间,为它们提供高效可靠的异步传输机制。
消息通道(Message
&&&&&& 使用MQ将彼此协作的客户端和服务端连接起来,使他们可以交换消息。
如客户端与服务端需要安全可靠的交互,可以将一个MQ的队列作为安全通道,是客户端与服务端能够安全高效的进行异步通讯。
消息总线(Message
&&&&& 对于由许多独立开发的服务组成的分布式系统,倘若要将它们组成一个完整的系统,这些服务必须能够可靠地交互,同时,为了系统的健壮性,
每个服务之间又不能产生过分紧密的依赖关系,这样就可以通过消息总线将不同的服务连接起来,允许它们异步的传递数据。
消息路由(Message
&&&&&& 通过消息路由,可以将发送到MQ指定队列的消息根据规则路由到不同的队列。
此外,JMS规范还支持通过selector条件,对消息进行过滤,可以用多个消费者消费同一个队列的消息,每个消费者只消费自己感兴趣的消息。
发布/订阅(Publicsher/Subscriber)
&&&&& 发布/订阅模式用于一对多的通讯,当消息发布者向一个主题(Topic)发送一条消息后,该主题的所有订阅者都会收到这条消息。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:60523次
排名:千里之外
(1)(1)(2)(1)(1)(2)(6)

我要回帖

更多关于 红米5a屏幕 的文章

 

随机推荐