[b]什么是消息[/b]
消息是组件和应用程序之间的一种通信形式。一个消息系统是点对点的设施。
消息客户端可以发送或接收消息。每一个客户端都连接到一个消息代理。这个代理
可以创建,发送,接收和读取消息。
消息传递可以分布式通信,是松耦合的。一个组件发送一条消息到目的地,接受者可以
从目的地接收到该条消息。然而,发送者和接受者不必为了通信同时可用。事实上,发送者
并不需要了解接收者的任何信息。同样接受者也不需要知道发送者。两者只需要知道消息的
格式和目的地。在这方面,消息不同于其他紧耦合技术,如RMI(远程方法调用),必须
知道远程应用的方法。
[b]消息传递的优点:[/b]
>便于集成:
使用消息传送机制,你可以向在完全不同的平台上实现的应用程序请求调用服务。
>缓解系统瓶颈
某些组件只能处理数量有限的请求,而且它将很快会变成系统瓶颈。
消息传送机制可以用于缓解乃至消除系统瓶颈。
因为消息传送可以是异步处理的,这点很重要,不需要阻塞。
将请求发送到一个消息系统后,消息系统可以分发给多个消息处理者
>提高可伸缩性
和缓解系统瓶颈的方式非常相似,消息传送机制还可以用于提高系统的整体可伸缩性和吞吐量,
同时,它还能够有效地缩短响应时间。通过引入能够并发处理不同消息的多个消息接收者,
消息传送系统的可伸缩性得以实现。由于消息排队等候处理、队列中的消息数量,或者称为队列深度,
开始逐渐增大,系统响应时间开始变长,与此同时,吞吐量也会下降。提高系统可伸缩性的一种方法就是,
向队列中添加多个并发消息侦听器,以便并发处理更多的请求。提高系统整体可伸缩性的另一种方法
,就是要尽可能地利用系统的异步方式。如此一来,按照这种方式的组件去耦就会允许系统水平增长,
而此时硬件资源则成为了主要的限制因素。虽然这看起来可能像一剂灵丹妙药,
不过,中间件只能在系统的另一个主要瓶颈(数据库)的实质性限制之内进行水平扩展(注:如果使用了数据库)。
你可以在单独的队列中拥有数百个甚至数千个消息侦听器,以此来提供同时处理多条消息的能力,
但是,数据库却可能只能处理数量有限的并发请求。尽管在应对数据库瓶颈问题方面,
已经有多种复杂的技术,然而现实却是:能将中间件层扩展到什么程度,
始终会受到数据库这种实质性的限制。
>体系结构灵活性和敏捷性
使用消息传送机制作为企业体系结构整体解决方案的一部分,
这为未来的体系结构灵活性和敏捷性留有了更大的余地。
这些优良特性是通过使用抽象和去耦来实现的。使用消息传送机制,
各个子系统、组件,乃至服务都能够被抽象出来,甚至可以达到在对其知之甚少,
甚至是一无所知的情况下,即可用客户端组件所取代的程度。
总之,消息传递机制的优点都得益于它的异步机制,减少了阻塞,缓解系统瓶颈,提高
系统可伸缩性。去耦合。
[b]JMS API[/b]
JMS API 允许应用创建,发送,接收和阅读消息。是由Sun和其他几个公司设计。
JMS API 定义了一组通用的接口和相关语义允许使用java语言和其他的消息系统进行通信。
JMS是一种厂商无关的API,可供多个不同的企业消息厂商使用,和JDBC非常相似。
api主干接口:
ConnectionFactory
Destination
Connection
Session
Message
MessageProducer
MessageConsumer
ConnectionFactory,Destination必须从JMS实现供应商处获得。其他的可以从接口方法获取。
从ConnectionFactory可以获取Connection,从Connection中可以获取Session.
Session就可以创建Producer,Consumer发送消息。
[b]消息传送模型:[/b]
JMS支持两种消息传送模型:点对点和发布订阅模型。
两种模式下接口不同:都是对上面说的主干接口进行不同的定制化,
如对于Destination,点对点使用Queue队列,发布订阅使用Topic。
发布订阅:广播形式。
message producer:消息生产者。发送消息的client。
message receiver:消息消费者。接收消息的client。
一个JMS client既可以是producer也可以是reciever
点对点(P2P)
一对一消息传送。通过队列(Queue)同步或异步的发送,接收消息。
发送到队列中的消息被一个而且仅仅一个接受者接收。即使一个
队列有配置有多个接受者。支持负载均衡,可以配置多个接受者。
消息传递基于pull,polling都可
发布订阅(Pub/Sub)
消息会被发布到主题中(Topic)。可以被多个订阅者读取。每个订阅者
都会接收到每条消息的一个副本。消息传递基于push。
比p2p去耦合能力更强。
消息是组件和应用程序之间的一种通信形式。一个消息系统是点对点的设施。
消息客户端可以发送或接收消息。每一个客户端都连接到一个消息代理。这个代理
可以创建,发送,接收和读取消息。
消息传递可以分布式通信,是松耦合的。一个组件发送一条消息到目的地,接受者可以
从目的地接收到该条消息。然而,发送者和接受者不必为了通信同时可用。事实上,发送者
并不需要了解接收者的任何信息。同样接受者也不需要知道发送者。两者只需要知道消息的
格式和目的地。在这方面,消息不同于其他紧耦合技术,如RMI(远程方法调用),必须
知道远程应用的方法。
[b]消息传递的优点:[/b]
>便于集成:
使用消息传送机制,你可以向在完全不同的平台上实现的应用程序请求调用服务。
>缓解系统瓶颈
某些组件只能处理数量有限的请求,而且它将很快会变成系统瓶颈。
消息传送机制可以用于缓解乃至消除系统瓶颈。
因为消息传送可以是异步处理的,这点很重要,不需要阻塞。
将请求发送到一个消息系统后,消息系统可以分发给多个消息处理者
>提高可伸缩性
和缓解系统瓶颈的方式非常相似,消息传送机制还可以用于提高系统的整体可伸缩性和吞吐量,
同时,它还能够有效地缩短响应时间。通过引入能够并发处理不同消息的多个消息接收者,
消息传送系统的可伸缩性得以实现。由于消息排队等候处理、队列中的消息数量,或者称为队列深度,
开始逐渐增大,系统响应时间开始变长,与此同时,吞吐量也会下降。提高系统可伸缩性的一种方法就是,
向队列中添加多个并发消息侦听器,以便并发处理更多的请求。提高系统整体可伸缩性的另一种方法
,就是要尽可能地利用系统的异步方式。如此一来,按照这种方式的组件去耦就会允许系统水平增长,
而此时硬件资源则成为了主要的限制因素。虽然这看起来可能像一剂灵丹妙药,
不过,中间件只能在系统的另一个主要瓶颈(数据库)的实质性限制之内进行水平扩展(注:如果使用了数据库)。
你可以在单独的队列中拥有数百个甚至数千个消息侦听器,以此来提供同时处理多条消息的能力,
但是,数据库却可能只能处理数量有限的并发请求。尽管在应对数据库瓶颈问题方面,
已经有多种复杂的技术,然而现实却是:能将中间件层扩展到什么程度,
始终会受到数据库这种实质性的限制。
>体系结构灵活性和敏捷性
使用消息传送机制作为企业体系结构整体解决方案的一部分,
这为未来的体系结构灵活性和敏捷性留有了更大的余地。
这些优良特性是通过使用抽象和去耦来实现的。使用消息传送机制,
各个子系统、组件,乃至服务都能够被抽象出来,甚至可以达到在对其知之甚少,
甚至是一无所知的情况下,即可用客户端组件所取代的程度。
总之,消息传递机制的优点都得益于它的异步机制,减少了阻塞,缓解系统瓶颈,提高
系统可伸缩性。去耦合。
[b]JMS API[/b]
JMS API 允许应用创建,发送,接收和阅读消息。是由Sun和其他几个公司设计。
JMS API 定义了一组通用的接口和相关语义允许使用java语言和其他的消息系统进行通信。
JMS是一种厂商无关的API,可供多个不同的企业消息厂商使用,和JDBC非常相似。
api主干接口:
ConnectionFactory
Destination
Connection
Session
Message
MessageProducer
MessageConsumer
ConnectionFactory,Destination必须从JMS实现供应商处获得。其他的可以从接口方法获取。
从ConnectionFactory可以获取Connection,从Connection中可以获取Session.
Session就可以创建Producer,Consumer发送消息。
[b]消息传送模型:[/b]
JMS支持两种消息传送模型:点对点和发布订阅模型。
两种模式下接口不同:都是对上面说的主干接口进行不同的定制化,
如对于Destination,点对点使用Queue队列,发布订阅使用Topic。
发布订阅:广播形式。
message producer:消息生产者。发送消息的client。
message receiver:消息消费者。接收消息的client。
一个JMS client既可以是producer也可以是reciever
点对点(P2P)
一对一消息传送。通过队列(Queue)同步或异步的发送,接收消息。
发送到队列中的消息被一个而且仅仅一个接受者接收。即使一个
队列有配置有多个接受者。支持负载均衡,可以配置多个接受者。
消息传递基于pull,polling都可
发布订阅(Pub/Sub)
消息会被发布到主题中(Topic)。可以被多个订阅者读取。每个订阅者
都会接收到每条消息的一个副本。消息传递基于push。
比p2p去耦合能力更强。