??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜精品在线,国产精品1区2区在线观看,国产69久久http://www.aygfsteel.com/conans/category/32441.html你越挣扎我就兴?/description>zh-cnThu, 26 Jun 2008 18:33:46 GMTThu, 26 Jun 2008 18:33:46 GMT60- 我的JMS实践 http://www.aygfsteel.com/conans/articles/210935.htmlCONANCONANThu, 26 Jun 2008 11:56:00 GMThttp://www.aygfsteel.com/conans/articles/210935.html
1.消息cd的选择
Java的JMS消息cd有文本类?对象cd,字节cd,类?XMLcd,在实际项目中,用的最多的是文本类?对象cd和xmlcd的消?最好不用对象类?因ؓ如果用对象类型的?调试的时候是很麻烦的,首先你必要写专门的试代码用来发送消?W二,必须要管理对象所属的cȝ不同版本,W三,不方便查看queue或者topic中的消息内容.而如果用文本类型或者xmlcd的消?那么可以很容易的通过JMS中间件提供的一些管理工h发送测试消?查看消息内容,q且更加Ҏ理不同版本之间的兼Ҏ?如果一定要用对象类型消息的?使用xstream把对象{化ؓxml
2.是用queueq是topic?
q两者的定义是很清楚?也很Ҏ区分.但是在实际项目中,如何来取舍呢?我的是尽量用queue.如果你的目用到了JMS,那么你的pȝ也应该是C需要部|在集群环境的规模了.用topic在集环境下会带来很多麻?举个单的例子,如果你是用MDB来处理topic的消?你有一个MDB名ؓSampleMDB,它以集群的方式分别部|在A服务器和B服务器上.那么有可能同一条topic消息被同一个MDB处理两次.虽然一些JMS中间件提供商册U问题提供了一些解x?例如把subsriber分组,但是它ؓ开发和调试都带来了很大的麻?topic消息的处理也要比queue的复?很难跟踪topic消息的处理过E?
那么,如果不用topic的话,怎么来实现topicq种性质的消息处理呢?可以写一个消息{发器,把一个queue上的消息转发l所有关注这个queue的其它queue?例如,有一个queue,名ؓSampleQ1,一个消息发送者sender,一个消息{发器router,有三个handler A,B,C需要处理这个queue中的消息.那么,sender发送消息到SampleQ1,router接收SampleQ1的消息后分别发送到SampleQ1_A,SampleQ1_B,SampleQ1_C,handler A,B,C分别从队列SampleQ1_A,SampleQ1_B,SampleQ1_C中接收消?
3.用JMS来解决什么问?
一提vJMS可以做什?W一惛_的就是异步处?面试的时候问JMS可以做什?大多数的回答?用JMS来异步发送邮?(到底应该怎么hZ个邮件发送系l不是本文的主题,以后有时间我会专门来谈谈在我的项目中,我是怎么来设计邮件发送系l的).其实,q可以用JMS来解军_多复杂的问题,例如分布,q发,pȝ解?负蝲均衡,热部|?触发器等{?q些复杂的问题因为引入了JMS而变的更加简?下面单介l下解决分布,q发问题的场?
3.1 用JMS来解军_ƈ发问?br />
queue的概念大安很清楚了,那就是queue里的一条消息只会被一个消息接收者处?Zq个概念,我们可以在系l中对ƈ发要求很严格的模块中引入JMS的?例如,pȝ的送积?一般这个模块是用一个定时器,例如quartz,每天定期查询数据?如果发现有满x件的记录,那么把U分送给会员.如果同时有多个quartz在运?那么必须严格控制防止q发的对同一条记录送多ơ积?解决q个问题有很多方?可以通过业务的设?pȝ的部|?数据库的设计,事务的控制等Ҏ来实?在这里提一个用JMS来解决问题的Ҏ:在插入记录的同时发送一个queue的消?q样即有多个送积分的MDB实例在运?也只会被一个实例处?
3.2用JMS来解军_布的问题
解决分布有两U类?W一U是指消息是集中?但消息的处理是分布的.例如,pȝ可能会被分ؓ前台与后?q两个系l是部v在不同的|段里的.那么怎么把前台发生的业务通知后台pȝ?当然,可以通过一个类似定时器的玩意定期去数据库查?但这U方式要么就是浪费系l资?可能在定期查询中80%的时间都是在做无用功,要么是业务h没有被及时处?,因ؓ定期的时间L有一个时间间隔的.用JMS来处理这个问题会怎么样呢?前台pȝ在处理完业务h后的同时发送一个消息到queue?后台pȝ的消息接收者接收到消息后立卛_?q里消息的处理也可能有一定的延期,但这主要取决于消息服务器的硬件能?|络带宽,消息接收者的处理速度{?
W二中是指消息也是分布的.很多消息中间仉提供了消息\q功能,x息发送到一个消息服务器?q个消息服务器根据定义的规则再把q条消息路由转发到其它的消息服务?例如,可能在北京的一个数据中心部|了数据采集pȝ,采集到数据后以消息的方式发送到消息服务?然后消息服务器再把这条消息\由到上v的数据中?再由上v数据中心部v的数据处理系l来处理q条消息.
4.JMS与事?一定要用JTA事务?br />
很多人接触到JTA事务都是从用JMS开始的,毕竟同时要连多个数据库的的系lƈ不是那么的多!而要用JTA事务的话,得要在W重的应用服务器中部|?(当然,你也可以用类似atomikos的轻量JTA事务理?,更重要的?q不是事务本w的技术有多复?而是事务的界?q种事务的界定有旉不是E序员能军_的事?需要在设计的时候就要考虑清楚,甚至可能q需要业务h员的参与.(题外?l常问面试的,用spring的aop做什?大多数答:用来理事务!事务要真q么单该多好?)
我也不是要反对用JTA事务,而是要说明一?用JMS,q一定要用JTA事务.q可以分ZU场?
一,必须用JTA事务,q种情况?一般消息的接收者只从消息本w获得数据ƈq行处理.所以必要保证消息的发送与所依赖的业务保持一?
?不需要用事务,q种情况? 要么是业务无关紧?例如用JMS来记录日?要么是发送的消息仅仅是一个作为后l业务处理的一个触发器!消息接收者仅仅是从消息中获得一个id,然后Ҏq个idL询所依赖的其它数据进行业务处?即消息丢失也没关系,可以通过其它的机制来补偿.
?消息丢失可以通过补偿事务来完?q个依赖与具体实?׃详细说了.
5.处理消息永远比发送消息慢!
要保证你的JMS应用E_的运?那么你必d开?部v的时候时刻重视这个问?
首先,需要把发送消息的q接池与接收消息的连接池分开.以避免接收消息的q接q过而导致发送消息的应用拿不到连?
在一个连接上q发的处理消?而不是连接打开,处理一个消?马上关闭q接.
合理的设|消息的q期旉,否则消息日积月篏,最l超出queue的size
对于非关键业务的消息处理,可以采用异步处理的方?接收到消息后q不是立d?而是攑ֈ一个Q务池或者线E池中处?如果消息处理p|,则把消息重新发送回队列?

]]> - JMS?/title>http://www.aygfsteel.com/conans/articles/209616.htmlCONANCONANFri, 20 Jun 2008 15:22:00 GMThttp://www.aygfsteel.com/conans/articles/209616.html阅读全文

]]>
վ֩ģ壺
״|
|
|
ף|
|
|
|
|
˹|
Դ|
|
|
ͨ|
ֶ|
ػ|
|
|
|
Ϫ|
|
|
ɽʡ|
Խ|
|
|
|
|
|
˼|
|
|
|
|
ԭƽ|
|
|
|
|
|
|
ʯɽ|