jms协议Word文件下载.docx
《jms协议Word文件下载.docx》由会员分享,可在线阅读,更多相关《jms协议Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
在这些情况下,同步传输会产生失败结果,除非服务本身可以进行“重新请求”操作和错误处理。
此外,soa中流程间的通讯并不总是点对点或者一对一的。
通常,服务需要同时对多个流程或者系统发送消息,是一对多的关系。
当服务也可以被多个“消费者”请求时,就增加了服务本身的复杂度并且使服务和终点紧密关联。
在很多情况下,服务要求有可靠的transport。
如果transport没有提供可靠的消息发布,在应用系统中就必须要增加额外的验证。
最后,transport必须是可扩展的。
transport本身不能对发布消息数量,消息发送方和消息接受方数量的增长进行限制。
http的优缺点
http是soap消息中最常用的transport。
毕竟,它是原始web服务标准中的第一个官方的soaptransport。
因此http作为标准的与web服务连接和通讯的方法,被应用系统和系统提供商广泛地采用。
然而,http本身所具有的点对点、同步的特性成为了它作为服务transport的局限。
了解http的功能和局限可以帮助我们找到最合适的地方使用它,并且根据情况考虑使用其他的协议替代它。
http只支持点对点和同步方式
http支持的通讯方式有两方面的局限。
首先,因为http是点对点协议,它不提供对多个接收方的并发请求能力。
在企业soa中,一个服务提供者可能需要在流程中的某一步完成后通知其他服务提供者。
当使用http时,服务必须明确的识别每一个接收者并向其发送消息。
这种限制可以得到某种程度的缓解。
解决方案包括开发一个应用系统来进行这些消息的连续传输或者根据oasis制定的web服务通知规范进行编码,soap扩展程序对通知进行寻址。
web服务通知规范目前正处于标准设置进程的公共评审阶段。
另一个局限是http只支持同步通讯。
很明显,在soa中既需要同步通讯也需要异步通讯。
流程经常会等待人工干预或者其他的流程结束。
在这种情况下,http的同步特性就不满足soap对transport的要求了。
http等待请求的响应,要占用宝贵的通讯资源直到它接收到响应信息。
在异步的情况下,在接收到响应消息前可能会有很长时间的等待。
一个并不算完善的使用http的soap提供异步消息的解决方案是采用web服务寻址标准。
通过使用web服务寻址,soap消息的整个路径(包括它的返回路径)可以在soap消息封装中直接描述。
web服务寻址支持单向消息,双向消息(比如请求/响应和点对点通讯)和长连接对话。
但是,这个标准增加了复杂度,需要另外编写程序和购买产品。
除去这些解决方案,情况依然如此:
为了使消息能够被成功的发送,http需要发送方和接收方同时被连接。
如果网络或者接收程序没有连接,http就不能发送消息。
简单的说,http本身并不具备企业soa所要求的通讯(通知和异步操作)的灵活性。
不论是在应用程序级还是在soap级,开发人员都必须要额外编程来实现通知和异步操作。
http提供有限的可靠性
因为http只能提供很有限的错误码,只能根据这些错误码区分很小一部分可能的错误情况,所以这个协议本身是不能保证发送方的消息确实被发送了。
然而确保信息被发送是任何企业soa的一项基本功能。
为了保证全部流程的每一步都能持续地进行,发送者的发送的信息必须保证能被指定的接收者接收到。
一个提升企业架构可靠性的方法就是提升网络和应用系统的可靠性,防止网络和应用系统过载。
另一个方法是为应用系统额外创建错误处理和修复功能。
第三种方法是在soap层编写程序,使他符合web服务可靠消息标准(可靠的web服务消息)。
但是,每一种方法都会增加成本和复杂度,而且他们也无法完全的避免失败。
http缺乏有效的可扩展性
通过http进行通讯的基础架构无法有效的进行扩展。
http服务器的架构限制了在任何时候同时连接的端口的个数。
理论上端口的数量可以达到65536个,但是为了避免服务器过载,可用的端口的最大数量要小很多。
这些连接占用了宝贵的机器资源,限制了可扩展性。
一旦达到了限制的数量,就需要增加额外的硬件(比如其他的web服务器)以增加容量,并且要设置负载均衡。
这些额外的手段增加了系统架构的成本和复杂度。
asynchronous
jmsjms
当使用jms作为消息transport,上面表格中的四种消息发送方式组合中的任何一种都可以使用。
这种既能使用同步操作又能使用异步操作,既能进行点对点方式,又能进行发布/订阅方式的功能使得jms在作为消息传送机制时比http有明显的优势,因为http本身只能支持同步和点对点传送。
更多的消息传送方式使得流程设计人员在为服务之间的通讯选择最合适的方式时,提供了更灵活的选择。
jms消息还可以设置优先级,使得对时间敏感的信息流有更多的控制,还可以作为定义服务通讯相关质量的方式。
管理员通常使用这种功能调整服务级别,完善整体服务性能。
这样在网络拥堵、系统临时宕机或者灾难恢复时,能确保那些拥有相关优先级的关键系统能够正常运行并进行通讯。
jms更可靠
当应用程序或者网络出现间歇性的失效甚至停止运行,jms能确保消息从发送者(生产者)传送到接收者(消费者),http就不能。
jms通过将消息存放在中间服务器上来实现这种可靠的传输。
比如,在保证消息传送的情况下,消息会被重发或者重复解析来保证消息确实被传送了。
与http不同,jms内置有错误恢复和消息重传机制,不需要在应用系统或者soap层进行编程。
jms扩展性更强
jms能更有效的使用系统资源,不论是在一台单独的机器上纵向线性增长的资源还是横向增长跨系统的资源都比http更高效。
scalingup:
jms可以在消息发送者和接收者之间配置单连接,甚至是在发送大量的并发消息的时候。
http需要为每一个请求和响应服务建立socket连接,消耗了大量的系统资源,jms就没有这种问题。
大量减少socket连接可以很好的节省系统资源,能支持更多的通讯量,因此提高了服务器的扩展性。
scalingout:
http和jms的一个最大的区别是jms将目的地址与物理主机或者应用系统名称分离。
这种独立的命名空间使得jms实现可以更加的动态。
比如,对于一些jms提供商,发送程序、路由服务器和接受程序可以被添加到相同的topic或者queue上,能够动态的增加负载。
这种负载均衡是通过软件来实现的,而不是额外的硬件设备。
基于jms的soap比基于http的soap更简单
相比http,很明显jms的消息传送更灵活、更可靠和更可扩展。
所有这些特性都是jms本身所具有的。
不需要像http一样,在应用系统或者soap层作开发。
使用jms代替http可以减少编写代码的时间和降低通讯的复杂度,使得开发的周期更短。
何时用http,何时用jms
虽然jms提供了更强大的transport功能,http已经在企业中被广泛的使用。
这些事实决定了在企业soa中,这两种协议会同时存在。
不只是你的企业,你的客户和合作伙伴也一样会同时使用这两种协议。
所以,你在选择soap消息的transport的时候就要考虑在什么时候是用http,什么时候是用jms。
你可以尝试是用一些简单的规则,比如在企业内部使用jms作为transport,在与合作伙伴和客户通讯的时候是用http。
但是,这种方法也过于简单。
可以通过考虑使用哪一种transport更有意义或者使整合变得更简单来选择,来代替使用位置(比如企业的内部或者外部)进行选择。
以下情况适合使用soap/http:
l流程和/或者服务已经使用了基于http的soap
l客户或者合作伙伴正在使用基于http的soap,或者想要使用
l通讯端点的一方是瘦客户端,比如portal或者web浏览器
以下情况适合使用soap/jms:
l需要与移动设备或者非持久连接的服务进行异步或者发布/订阅通讯
l可靠性和扩展性要求高的服务,比如关键任务服务,数据发布或者同步
l必须与那些没有web服务接口并且要求整合的应用系统连接的时候
l客户或者合作伙伴使用基于jms的soap
大多数企业都可能会用到多协议,为不同的情况选择最合适的transport协议,这是最基本的要求。
实现企业级soa
为了使企业soa的作用达到极致,不论在底层使用的是什么样的通讯协议,所有的企业中的服务都要被重用。
在企业级的soa中,服务之间使用多种不同的协议进行通讯。
比如http,还有其他很多种协议。
jms由于提供了更好的灵活性、可靠性和扩展性,经常被要求严格的、关键任务的服务所使用。
这就意味着soa需要在使用不同的transport和协议的服务间进行通讯,不管他们是不是web服务。
要对不同的协议进行无缝的连接,提供各个服务间的连接能力(使企业中的服务实现重用),需要企业服务总线(esb)来完成这个工作。
tibcobusinessworks产品提供所有的esb功能,包括高级esb服务和服务集成环境,使开发人员可以不去关心底层系统的复杂性并提高生产效率。
soa的最主要的目标之一,就是使那些使用http,jms和其他协议的系统能够一起工作,实现企业范围内的服务重用,但是实现这个目标是很困难的。
幸运的是,客户可以通过esb在soa中选择和使用多种协议。
通过esb本身支持的基于http、jms或者其他协议的soap和xml,跨协议路由,数据转换或者其他功能,可以最大限度的实现跨协议的
篇二:
jms总结
jms学习总结
一、client跟activemq的tcp通讯的初始化过程分析如下:
1.activemq初始化时,通过tcptransportserver类根据配置打开tcp侦听端口,客户通过该端口发起建立链接的动作。
2.把accept的socket放入阻塞队列中。
3.另外一个线程sockethandler阻塞着等待队列中是否有新的socket,如果有则取出来。
4.生成一个transportconnection的实例。
transportconnection类的主要作用是处理链路的状态信息,并实现commandVisitor接口来完成各类消息的处理。
5.transportconnection会使用一个由多个transportFilter实例组成的消息处理链条,负责对接收到的各类消息进行处理并发送相应的应答。
这个链条的典型组成顺序:
mutextransport->
wireFormatnegotiator->
inactivitymonitor->
tcptransport。
在这条链条中最后的一环就是tcptransport类,它是实际和client获取和发送数据的地方,该类的重要方法有run()和oneway(),一个负责读取,一个负责发送。
6.建链完成,可以进行通讯操作。
二、关闭链接
activemq发现tcp链接的关闭,最关键的代码在tcpbufferedinputstream类中的intn=in.read(buffer,position,buffer.length-position);
三、心跳
为了更好的维护tcp链路的使用,activemq采用了心跳机制作为判断双方链路的健康情况。
activemq使用的是双向心跳,也就是activemq的broker和client双方都进行相互心跳,但不管是broker或client心跳的具体处理情况是完全一样的,都在inactivitymonitor类中实现,下面具体介绍。
心跳会产生两个线程“inactivitymonitorReadcheck”和“inactivitymonitorwritecheck”,它们都是timer类型,都会隔一段固定时间被调用一次。
Readcheck线程主要调用的方法是readcheck(),当在等待时间内,有消息接收到,则该方法会返回true。
writecheck线程主要调用的方法是writecheck(),这有个小技巧(jms协议),大家可以参考一下,那就是当writecheck线程休眠时,有任何数据发送成功,则该线程被唤醒后,不用通过tcp向对方真的发送心跳消息,这样可以从一定程度上减少网络传输的数据量。
activemq的通讯处理机制还有很多,如断开重连等等,非常希望大家可以有兴趣来一起补充。
后文待续。
四特性及优势
1实现jms1.1支持j2ee1.4以上
2可运行任何jvm大部分web容器
3支持多种语言开发客户端(java,c++,ajax)
4支持多种协议(stomp,openwiererest)
5良好的spring支持
6速度快jbossmq快10倍
7开源apache支持
两种消息形式queue队列topic主题
对应两种形式point-point(点对点)
publisher/subscribermodel(发布/订阅模式)
1jmsqueue
一条消息仅能被一个consumer收到,如果在message发送的时候没有用的consumer,那么它将保存一直到能处理该message的consumber
可用,一个queue可以有多个consumer,并且在多个可用的consumer中负载均衡topic实现publish和subscribe
一条消息发布后,他将发送到所有感兴趣的订阅者,那么零到多个subscribe人将收到消息的拷贝,但在消息代理收到消息时
只有激活订阅的subscriber能够获得消息的拷贝
篇三:
jms配置说明
jms配置说明
(acitvemq5.2)
陕西汉瑞科技信息有限公司
20xx年8月
目录
1.activemq安装.....................................................................................................................................................3
1.1简介.................................................................................................................................................................3
1.2安装activemq.............................................................................................................................................4
1.3改动缺省端口号...........................................................................................................................................6
2activemq配置....................................................................................................................................................13
2.1消息队列配置..............................................................................................................................................13
2.2jms连接参数配置......................................................................................................................................14
2.3监听器配置..................................................................................................................................................15
3.服务器端配置......................................................................................................................................................15
3.1需要的类库.................................................................................................................................................15
3.2服务器端applicationcontext_activemq.xml配置..............................................................................16
3.3启动..............................................................................................................................................................20
4web配置说明...................................................................................................................................................20
4.1配置要求.......................................................................................................................................................20
4.2myapplicationcontext_rmi.xml配置.......................................................................................................20
5.客户端应用程序配置........................................................................................................................................21
5.1客户端安装.................................................................................................................................................21
5.2客户端applicationcontext_activemq.xml配置...................................................................................21
5.3启动..............................................................................................................................................................25
6.api接口说明......................................................................................................................................................25
6.1jmssender.....................................................................................................................................................25
6.2jmsReciever..................................................................................................................................................25
6.3在web程序中调用......................................................................