銆銆 Spring妗嗘灦鍒欑畝鍖栦簡(jiǎn)浣跨敤JEE緇勪歡(鍖呮嫭JMS)鐨勪換鍔°傚畠鎻愪緵鐨勬ā鏉挎満鍒墮殣钘忎簡(jiǎn)鍏稿瀷鐨凧MS瀹炵幇鐨勭粏鑺傦紝榪欐牱寮鍙戜漢鍛樺彲浠ラ泦涓簿鍔涙斁鍦ㄥ鐞嗘秷鎭殑瀹為檯宸ヤ綔涓紝鑰屼笉鐢ㄦ媴蹇?jī)濡備綍鍘诲垱寰忓Q岃闂垨娓呴櫎JMS璧勬簮銆?/p>
銆銆 鏈枃灝嗗Spring JMS API浣滀竴涓榪幫紝騫墮氳繃涓涓繍琛屽湪JBoss MQ鏈嶅姟鍣ㄤ笂鐨剋eb渚嬬▼鏉ヤ粙緇嶅浣曚嬌鐢⊿pring JMS API鏉ュ紓姝ュ鐞嗭紙鍙戦佸拰鎺ユ敹錛夋秷鎭傛垜灝嗛氳繃浼犵粺JMS瀹炵幇鍜孲pring JMS瀹炵幇涓よ呴棿鐨勬瘮杈冿紝鏉ュ睍紺轟嬌鐢⊿pring JMS澶勭悊娑堟伅鏄浣曠殑綆鍗曞拰鐏墊椿銆?/p>
銆銆鍦ㄧ幇瀹炰腑錛屽ぇ澶氭暟web璇鋒眰閮芥槸鍚屾澶勭悊鐨勩備緥濡傦紝褰撶敤鎴瘋鐧誨叆涓涓綉绔欙紝棣栧厛杈撳叆鐢ㄦ埛鍚嶅拰瀵嗙爜錛岀劧鍚庢湇鍔″櫒楠岃瘉鐧誨綍鍚堟硶鎬с傚鏋滈獙璇佹垚鍔燂紝紼嬪簭灝嗗厑璁歌鐢ㄦ埛榪涘叆緗戠珯銆傝繖閲岋紝鐧誨綍璇鋒眰鍦ㄤ粠瀹㈡埛绔帴鏀朵互鍚庤鍗蟲椂澶勭悊浜?jiǎn)銆備俊鐢ㄥ崱楠岃瘉鏄彟涓涓悓姝ュ鐞嗙殑渚嬪瓙錛涘彧鏈夋湇鍔″櫒璇佸疄杈撳叆鐨勪俊鐢ㄥ崱鍙鋒槸鏈夋晥鐨勶紝鍚屾椂瀹㈡埛鍦ㄥ笎鎴蜂笂鏈夎凍澶熺殑瀛樻錛屽鎴鋒墠琚厑璁哥戶緇搷浣溿備絾鏄鎴戜滑鎬濊冧竴涓嬪湪欏哄簭澶勭悊緋葷粺涓婄殑鏀粯緇撶畻姝ラ銆備竴鏃︾郴緇熻瘉瀹炶鐢ㄦ埛淇$敤鍗$殑淇℃伅鏄噯紜殑錛屽茍涓斿湪甯愭埛涓婃湁瓚沖鐨勮祫閲戯紝灝變笉蹇呯瓑鍒版墍鏈夌殑鏀粯緇嗚妭钀藉疄銆佽漿璐﹀畬鎴愩傛敮浠樼粨綆楀彲浠ュ紓姝ユ柟寮忚繘琛岋紝榪欐牱瀹㈡埛鍙互緇х畫榪涜鏍告煡鎿嶄綔銆?/p>
銆銆 闇瑕佹瘮鍏稿瀷鍚屾璇鋒眰鑰楄垂鏇撮暱鏃墮棿鐨勮姹傦紝鍙互浣跨敤寮傛澶勭悊銆傚彟涓涓紓姝ュ鐞嗙殑渚嬪瓙鏄紝鍦ㄦ湰鍦拌捶嬈懼鐞嗙▼搴忎腑錛屾彁浜よ嚦鑷姩鎵塊攢緋葷粺錛圓US錛夌殑淇$敤璇鋒眰澶勭悊榪囩▼銆傚綋鍊熸柟鎻愪氦璐鋒鐢寵鍚庯紝鎶墊娂鍏徃浼?xì)鍚慉US鍙戦佽姹傦紝浠ヨ幏鍙栦俊鐢ㄥ巻鍙茶褰曘傜敱浜庤繖涓姹傝姹傚緱鍒板叏闈㈣屽張璇︾粏鐨勪俊鐢ㄦ姤鍛婏紝鍖呮嫭鍊熸柟鐜頒粖鍜岃繃鍘葷殑甯愭埛錛屾渶榪戠殑浠樻鍜屽叾浠栬儲(chǔ)鍔¤祫鏂欙紝鏈嶅姟鍣ㄩ渶瑕佽楄垂杈冮暱鐨勬椂闂達(dá)紙鍑犲皬鏃舵垨鐫鏈夋椂鐢氳嚦鏄嚑澶╋級(jí)鏉ュ榪欎簺璇鋒眰浣滃嚭鍝嶅簲銆傚鎴風(fēng)紼嬪簭錛堝簲鐢級(jí)瑕佷笌鏈嶅姟鍣ㄨ繛鎺ュ茍鑰楄垂濡傛闀跨殑鏃墮棿鏉ョ瓑寰呯粨鏋滐紝榪欐槸姣棤鎰忎箟鐨勩傚洜姝ら氫俊搴旇鏄紓姝ュ彂鐢熺殑錛涗篃灝辨槸錛屼竴鏃﹁姹傝鎻愪氦錛屽畠?yōu)p鏀劇疆鍦ㄩ槦鍒椾腑錛屽悓鏃跺鎴風(fēng)涓庢湇鍔″櫒鏂紑榪炴帴銆傜劧鍚嶢US鏈嶅姟浠庢寚瀹氱殑闃熷垪涓夊嚭璇鋒眰榪涜澶勭悊錛屽茍灝嗗鐞嗗緱鍒扮殑娑堟伅鏀劇疆鍦ㄥ彟涓涓秷鎭槦鍒楅噷銆傛渶鍚庯紝瀹㈡埛绔▼搴忎粠榪欎釜闃熷垪涓夊嚭澶勭悊緇撴灉錛岀揣鎺ョ潃澶勭悊榪欎釜淇$敤鍘嗗彶鏁版嵁銆?/p>
銆銆 濡傛灉鎮(zhèn)ㄤ嬌鐢ㄨ繃JMS浠g爜錛屾?zhèn)ㄤ細(xì)鍙戠幇瀹冧笌JDBC鎴朖CA寰堝儚銆傚畠鎵鍖呭惈鐨勬牱鏈唬鐮佸垱寤烘垨JMS璧勬簮瀵硅薄鍥炴函錛屼嬌寰楁瘡涓嬈℃?zhèn)ㄩ渶瑕佸啓涓涓柊綾繪潵鍙戦佸拰鎺ユ敹娑堟伅鏃訛紝閮藉叿鏈夋洿濂界殑浠g爜瀵嗛泦鎬у拰閲嶅鎬с備互涓嬪簭鍒楁樉紺轟簡(jiǎn)浼犵粺JMS瀹炵幇鎵鍖呮嫭鐨勬楠わ細(xì)
聽
銆銆 Spring妗嗘灦鎻愪緵浜?jiǎn)涓涓ā鏉挎満鍒舵潵闅愯棌Java APIs鐨勭粏鑺傘侸EE寮鍙戜漢鍛樺彲浠ヤ嬌鐢↗DBCTemplate鍜孞NDITemplate綾繪潵鍒嗗埆璁塊棶鍚庡彴鏁版嵁搴撳拰JEE璧勬簮錛堟暟鎹簮錛岃繛鎺ユ睜錛夈侸MS涔熶笉渚嬪銆係pring鎻愪緵JMSTemplate綾伙紝鍥犳寮鍙戜漢鍛樹笉鐢ㄤ負(fù)涓涓狫MS瀹炵幇鍘葷紪鍐欐牱鏈唬鐮併傛帴涓嬫潵鏄湪寮鍙慗MS搴旂敤紼嬪簭鏃禨pring鎵鍏鋒湁涓浜涚殑浼樺娍銆?/p>
聽
銆銆 琛?. Spring JMS綾?/p>
綾誨悕 | 鍖?/th> | 鍔熻兘 |
---|---|---|
JmsException | org.springframework.jms | 鍙鍙戠敓涓涓狫MS寮傚父錛孲pring妗嗘灦灝變細(xì)鎶涘嚭寮傚父錛岃繖涓被鏄繖浜涙墍鎶涘嚭鐨勫紓甯哥殑鍩猴紙鎶借薄錛夌被銆?/td> |
JmsTemplate, JmsTemplate102 | org.springframework.jms.core | 榪欎簺鏄緟鍔╃被錛岀敤浜庣畝鍖朖MS鐨勪嬌鐢紝澶勭悊JMS璧勬簮錛堝榪炴帴宸ュ巶錛岀洰鏍囧拰鍙戦佽?鎺ユ敹鑰呭璞★級(jí)鐨勫垱寤哄拰閲婃斁銆侸msTemplate102鏄疛msTemplate鐨勫瓙綾伙紝浣跨敤JMS1.0.2瑙勮寖 |
MessageCreator | org.springframework.jms.core | 榪欐槸JmsTemplate綾諱嬌鐢ㄧ殑鍥炲彨鎺ュ彛錛屽畠涓烘寚瀹氱殑浼?xì)璇濆垱寰廕MS娑堟伅銆?/td> |
MessageConverter | org.springframework.jms.support.converter | 榪欎釜鎺ュ彛鍏呭綋涓涓娊璞★紝鐢ㄦ潵鍦↗ava瀵硅薄涓嶫MS娑堟伅涔嬮棿榪涜杞崲銆?/td> |
DestinationResolver | org.springframework.jms.support.destination | 榪欐槸JmsTemplate鐢ㄦ潵瑙f瀽鐩爣鍚嶇殑鎺ュ彛銆傝鎺ュ彛鐨勯粯璁ゅ疄鐜版槸DynamicDestinationResolver鍜孞ndiDestinationResolve |
銆銆鍦ㄦ帴涓嬫潵鐨勯儴鍒嗭紝鎴戝皢璇︾粏瑙i噴琛?鎵鍒楃殑涓閮ㄥ垎綾伙紙渚嬪JmsTemplate錛孌estinationResolver鍜孧essageConverter錛夈?/p>
銆銆JmsTemplate鎻愪緵浜?jiǎn)鍑牽U嶈緟鍔╂柟娉曪紝鐢ㄦ潵鎵ц涓浜涘熀鏈搷浣溿傝寮濮嬩嬌鐢↗msTemplate鍓嶏紝鎮(zhèn)ㄩ渶瑕佺煡閬揓MS渚涘簲鍟嗘敮鎸佸摢涓狫MS瑙勮寖錛?a target="_blank">JBoss AS 4.0.2鍜?a target="_blank">WebLogic 8.1鏈嶅姟鍣ㄦ敮鎸丣MS 1.0.2瑙勮寖銆俉ebLogic Server 9.0鍖呮嫭浜?jiǎn)瀵?a target="_blank">JMS 1.1瑙勮寖鐨?a target="_blank">鏀寔銆侸MS 1.1緇熶竴浜?jiǎn)鐐瑰鐐瑰Q圥TP錛夊拰鍙戝竷/璁㈤槄錛圥ub/Sub錛夊煙鐨勭紪紼嬫帴鍙c傝繖縐嶆敼鍙樼殑緇撴灉灝辨槸錛屽紑鍙戜漢鍛樺彲浠ュ垱寤轟竴涓簨鍔′細(xì)璇濓紝鐒跺悗鍦ㄨ繖鍚屼竴涓狫MS浼?xì)璇濋噷锛屽彲浠ヤ粠涓涓猀ueue(PTP)涓帴鏀舵秷鎭紝鍚屾椂鍙戦佸彟涓涓秷鎭埌涓涓猅opic(Pub/Sub)銆侸MS 1.1鍚戝悗鍏煎JMS 1.0錛屽簲姝ゆ牴鎹甁MS 1.0緙栧啓鐨勪唬鐮佷粛鍙互閫傜敤浜嶫MS 1.1銆?/p>
銆銆 JmsTemplate鎻愪緵澶氱鍙戦佸拰鎺ユ敹娑堟伅鐨勬柟娉曘傝〃2鍒楀嚭浜?jiǎn)杩欎簺鏂规硶鐨勪竴閮ㄥ垎銆?/p>
銆銆 琛?. JMS template鏂規(guī)硶
鏂規(guī)硶鍚嶇О | 鍔熻兘 |
---|---|
send | 鍙戦佹秷鎭嚦榛樿鎴栨寚瀹氱殑鐩爣銆侸msTemplate鍖呭惈send鏂規(guī)硶錛屽畠閫氳繃javax.jms.Destination鎴朖NDI鏌ヨ鏉ユ寚瀹氱洰鏍囥?/td> |
receive | 浠庨粯璁ゆ垨鎸囧畾鐨勭洰鏍囨帴鏀舵秷鎭紝浣嗗彧浼?xì)鍦ㄦ寚瀹氱殑鏃堕棿鍚庝紶閫掓秷鎭傛垜浠彲浠ラ氳繃receiveTimeout灞炴ф寚瀹氳秴鏃舵椂闂淬?/td> |
convertAndSend | 榪欎釜鏂規(guī)硶濮旀墭MessageConverter鎺ュ彛瀹炰緥澶勭悊杞崲榪囩▼錛岀劧鍚庡彂閫佹秷鎭嚦鎸囧畾鐨勭洰鏍囥?/td> |
receiveAndConvert | 浠庨粯璁ゆ垨鎸囧畾鐨勭洰鏍囨帴鏀舵秷鎭傚茍灝嗘秷鎭漿鎹負(fù)Java瀵硅薄銆?/td> |
銆銆鐩爣鍙互閫氳繃JNDI涓婁笅鏂囦繚瀛樺拰鑾峰彇銆傚綋閰嶇疆Spring紼嬪簭涓婁笅鏂囷紙application context錛夋椂錛屾垜浠彲浠ョ敤JndiObjectFactoryBean綾誨彇寰楀JMS鐨勫紩鐢ㄣ侱estinationResolver鎺ュ彛鏄敤鏉ユ妸鐩爣鍚嶇О瑙f瀽鎴怞MS鐩爣錛屽綋搴旂敤紼嬪簭瀛樺湪澶ч噺鐩爣鏃訛紝榪欐槸闈炲父鏈夌敤鐨勩侱ynamicDestinationResolver(DestinationResolver鐨勯粯璁ゅ疄鐜?鏄敤鏉ヨВ鏋愬姩鎬佺洰鏍囩殑銆?/p>
銆銆 MessageConverter鎺ュ彛瀹氫箟浜?jiǎn)灏?a target="_blank">Java瀵硅薄杞崲涓篔MS娑堟伅鐨勭害瀹氥傞氳繃榪欎釜杞崲鍣紝搴旂敤紼嬪簭浠g爜鍙互闆嗕腑浜庡鐞嗕簨鍔″璞★紝鑰屼笉鐢ㄤ負(fù)瀵硅薄濡備綍琛ㄧず涓篔MS娑堟伅榪欐牱鐨勫唴閮ㄧ粏鑺傛墍鍥伴ザ銆係impleMessageConverter(鍜孲impleMessageConverter102)鏄疢essageConverter鐨勯粯璁ゅ疄鐜般傚彲浣跨敤瀹冧滑鍒嗗埆灝哠tring杞崲涓篔MS TextMessage錛屽瓧鑺傛暟緇?byte[])杞崲涓篔MS BytesMessage錛孧ap杞崲涓篔MS MapMessage錛屽拰Serializable瀵硅薄杞崲涓篔MS ObjectMessage銆傛?zhèn)ㄤ篃鍙互缂栧啓鑷畾涔夌殑MessageConverter瀹炰緥錛岄氳繃XML緇戝畾妗嗘灦錛堜緥濡?a target="_blank">JAXB錛?Castor錛?a target="_blank">Commons Digester錛?a target="_blank">XMLBeans鎴?a target="_blank">XStream錛夛紝鏉ュ疄鐜癤ML鏂囨。鍒癟extMessage瀵硅薄鐨勮漿鎹€?/p>
銆銆鎴戝皢鐢ㄤ竴涓捶嬈劇敵璇峰鐞嗙郴緇燂紙鍛藉悕涓篖oanProc錛夌ず渚嬫潵婕旂ず濡備綍鍦↗MS搴旂敤紼嬪簭涓嬌鐢⊿pring銆備綔涓鴻捶嬈劇敵璇風(fēng)殑涓閮ㄥ垎錛孡oanProc閫氳繃鍙戦佽捶嬈捐鎯咃紙璐鋒ID錛屽熸柟鍚嶅瓧錛屽熸柟鐨凷SN錛岃捶嬈炬湡闄愬拰璐鋒鏁伴錛夛紝浠嶢US緋葷粺鑾峰緱淇$敤鍘嗗彶璇︽儏銆備負(fù)浜?jiǎn)绠渚胯搗瑙侊紝鎴戜滑鍩轟簬涓や釜鍩烘湰鍙傛暟鏉ヨ〃紺轟俊鐢ㄥ巻鍙茶鎯咃細(xì)淇$敤鍒嗘暟錛堝張鍚岶ICO寰楀垎錛夊拰璐鋒鏁伴銆傝鎴戜滑鍋囪澶勭悊淇$敤媯(gè)鏌ヨ姹傛槸鎸変互涓嬩笟鍔¤鍒欒繘琛岀殑錛?/p>
銆銆淇$敤璇鋒眰澶勭悊浣跨敤妗堜緥鍖呮嫭浠ヤ笅鍑犱釜姝ラ錛?/p>
銆銆鍦ㄨ繖涓緥紼嬩腑錛屼袱涓秷鎭槦鍒楅兘閰嶇疆鍦ㄥ悓涓涓狫Boss MQ server涓娿備嬌鐢ㄦ渚嬬敤鍥?鐨勫簭鍒楀浘錛圫equenceDiagram錛夎〃紺?/p>
鍥?.璐鋒澶勭悊紼嬪簭鐨勫簭鍒楀浘 (鍗曞嚮鎴浘鏉ユ煡鐪嬪畬鏁磋鍥?
銆銆 涓嬮潰鐨勮〃3鏄劇ず浜?jiǎn)鍦ㄤ緥绋嬩腑鎴戞墍浣跨敤鐨勪笉鍚屾妧鏈拰寮婧?/a>妗嗘灦錛屽茍鎸夊簲鐢ㄩ昏緫灞傛帓鍒椼?/p>
銆銆 琛?. 鍦↗MS搴旂敤紼嬪簭涓嬌鐢ㄧ殑妗嗘灦
閫昏緫灞?/th> | 鎶鏈?妗嗘灦 |
---|---|
MVC | Spring MVC |
Service | Spring Framework (version 2.1) |
JMS API | Spring JMS |
JMS Provider | JBoss MQ (version 4.0.2) |
JMS Console | Hermes |
IDE | Eclipse 3.1 |
銆銆涓轟簡(jiǎn)寮傛澶勭悊娑堟伅錛岄鍏堟垜浠渶瑕佹秷鎭槦鍒楀彂閫佸拰鎺ユ敹娑堟伅銆傛垜浠彲浠ョ敤Jboss閲岀殑閰嶇疆XML鏂囦歡鍒涘緩涓涓柊鐨勬秷鎭槦鍒楋紝鐒跺悗浣跨敤JMS鎺у埗鍙版祻瑙堥槦鍒楃殑璇︾粏鎯呭喌銆傛竻鍗?鏄劇ず浜?jiǎn)閰嵕|甁MS鐨刋ML閰嶇疆浠g爜鐗囨柇錛堣繖涓簲璇ュ姞鍏ュ埌jbossmq-destinations-service.xml鏂囦歡錛屼綅浜?JBOSS_HOME%server lldeploy-hasingletonjm鏂囦歡澶逛笅銆傦級(jí)
銆銆 娓呭崟1.JBoss MQ Server涓奐MS闃熷垪鐨勯厤緗?/p>
<!-- Credit Request Send Queue --> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=CreditRequestSendQueue"> <depends optional-attribute-name="DestinationManager"> jboss.mq:service=DestinationManager </depends> </mbean> <!-- Credit Request Receive Queue --> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=CreditRequestReceiveQueue"> <depends optional-attribute-name="DestinationManager"> jboss.mq:service=DestinationManager </depends> </mbean>
銆銆鐜板湪錛岃鎴戜滑鐪嬬湅濡備綍浣跨敤涓涓悕涓篐ermes鐨凧MS宸ュ叿鏉ユ祻瑙堟秷鎭槦鍒椼?a target="_blank">Hermes鏄竴涓狫ava Swing搴旂敤紼嬪簭錛屽畠鍙互鍒涘緩銆佺鐞嗗拰鐩戣JMS鎻愪緵鍟嗭紙渚嬪JBossMQ錛?a target="_blank">WebSphereMQ錛?a target="_blank">ActiveMQ鍜?a target="_blank">Arjuna鏈嶅姟鍣級(jí)閲岀殑JMS鐩爣銆備粠瀹冪殑緗戠珯涓婁笅杞紿ermes錛岃В鍘嬬緝.zip鏂囦歡鍒版湰鍦扮洰褰曪紙渚嬪錛宑:dev oolshermes錛夈備竴鏃﹀畨瑁呭畬鎴愶紝鍙屽嚮鏂囦歡hermes.bat錛堜綅浜巄in鏂囦歡澶逛笅錛夊惎鍔ㄧ▼搴忋?/p>
銆銆 瑕佸湪Hermes閲岄厤緗甁BossMQ鏈嶅姟鍣紝璇峰弬鑰僅ermes緗戠珯涓婄殑榪欎釜婕旂ず銆傚畠鏈夌潃鍑?guó)檳茬殑step-by-step鍙鍖栨寚紺烘潵閰嶇疆JBoss MQ銆傚綋閰嶇疆涓涓柊鐨凧NDI鍒濆涓婁笅鏂囨椂錛岃杈撳叆涓嬮潰鐨勪俊鎭?/p>
銆銆褰撴?zhèn)ㄥ垱寰忔柊鐨勭洰鏍囨椨灱岃偩撳叆queue/CreditRequestSendQueue鍜宷ueue/CreditRequestReceiveQueue銆傚浘2鏄劇ず浜?jiǎn)JMS鎺у埗鍙扮殑涓葷獥鍙o紝鍏朵腑鏈変負(fù)JMS渚嬬▼鍒涘緩鐨勬柊鐨勬秷鎭槦鍒椼?/p>
鍥?2. Hermes涓墍鏈夌洰鏍囩殑鎴浘.錛堝崟鍑?yán)L埅鍥炬潵鏌ョ湅瀹屾暣瑙嗗浘錛?/p>
銆銆 涓嬮潰鐨勫浘3鏄劇ず浜?jiǎn)鍦ㄤ粠娑堟伅鍙戦佽呯被鍙戦佹秷鎭埌CreditRequestSendQueue鍚庯紝Hermes JMS鎺у埗鍙板強(qiáng)娑堟伅闃熷垪鐨勬埅鍥俱傛?zhèn)ㄥ彲浠ョ湅瑙佹?涓秷鎭湪闃熷垪涓紝鎺у埗鍙版樉紺轟簡(jiǎn)娑堟伅璇︽儏錛屼緥濡傛秷鎭疘D錛屾秷鎭洰鏍囷紝鏃墮棿鎴沖拰瀹為檯鐨勬秷鎭唴瀹廣?/p>
鍥?3. Hermes涓墍鏈夐槦鍒楃殑鎴浘.錛堝崟鍑?yán)L埅鍥炬潵鏌ョ湅瀹屾暣瑙嗗浘錛?/p>
銆銆 鍦ㄤ緥紼嬩腑浣跨敤鐨勯槦鍒楀悕縐板拰鍏朵粬JMS鍜孞NDI鍙傛暟瑙佽〃 4銆?/p>
銆銆 琛?. Spring JMS閰嶇疆鍙傛暟
鍙傛暟鍚嶇О | 鍙傛暟鍊?/th> |
---|---|
Initial Context Factory | org.jnp.interfaces.NamingContextFactory |
Provider URL | localhost:8080 |
Initial Context Factory URL Packages | org.jnp.interfaces:org.jboss.naming |
Queue Connection Factory | UIL2ConnectionFactory |
Queue Name | queue/CreditRequestSendQueue, queue/CreditRequestReceiveQueue |
銆銆鏃㈢劧鎴戜滑宸茬粡鏈変簡(jiǎn)榪愯渚嬬▼鎵闇瑕佺殑JMS鐩爣錛岀幇鍦ㄨ浜?jiǎn)瑙g?a target="_blank">XML Spring閰嶇疆鏂囦歡錛堝悕涓簊pring-jms.xml錛夋潵緇勯厤JMS緇勪歡鐨勫叿浣撶粏鑺備簡(jiǎn)銆傝繖浜涚粍浠舵槸鏍規(guī)嵁Inversion of Controller (IOC)璁捐妯″紡閲岀殑璁劇疆鏂瑰紡娉ㄥ叆鍘熷垯錛坰etter injection principle錛夛紝鐢↗MS瀵硅薄瀹炰緥綾葷粍閰嶇殑銆傝鎴戜滑璇︾粏鏌ョ湅榪欎簺緇勪歡錛屽茍涓烘瘡涓涓狫MS緇勪歡婕旂ず涓孌礨ML閰嶇疆浠g爜銆?/p>
銆銆 JNDI涓婁笅鏂囨槸鍙栧緱JMS璧勬簮鐨勮搗濮嬩綅緗紝鍥犳棣栧厛鎴戜滑瑕侀厤緗甁NDI妯℃澘銆傛竻鍗?鏄劇ず浜?jiǎn)鍚嶄负jndiTemplate鐨凷pring bean錛屽叾涓垪鏈塉NDI鍒濆涓婁笅鏂囨墍蹇呴渶鐨勫父鐢ㄥ弬鏁般?/p>
銆銆 娓呭崟2. JNDI涓婁笅鏂囨ā鏉?/p>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> <property name="environment"> <props> <prop key="java.naming.factory.initial"> org.jnp.interfaces.NamingContextFactory </prop> <prop key="java.naming.provider.url"> localhost </prop> <prop key="java.naming.factory.url.pkgs"> org.jnp.interfaces:org.jboss.naming </prop> </props> </property> </bean>
銆銆鎺ョ潃錛屾垜浠厤緗槦鍒楄繛鎺ュ伐鍘傘傛竻鍗?鏄劇ず浜?jiǎn)闃熷垪杩炴帴宸ュ巶鐨勯厤缃?/p>
銆銆 娓呭崟3. JMS闃熷垪榪炴帴宸ュ巶閰嶇疆
<bean id="jmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiTemplate"> <ref bean="jndiTemplate"/> </property> <property name="jndiName"> <value>UIL2ConnectionFactory</value> </property> </bean>
銆銆鎴戜滑瀹氫箟2涓狫MS鐩爣鏉ュ彂閫佸拰鎺ユ敹娑堟伅銆傝鎯呰娓呭崟4鍜?銆?/p>
銆銆 娓呭崟4. 鍙戦侀槦鍒楅厤緗?/p>
<bean id="sendDestination" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiTemplate"> <ref bean="jndiTemplate"/> </property> <property name="jndiName"> <value>queue/CreditRequestSendQueue</value> </property> </bean>
銆銆娓呭崟5. 鎺ユ敹闃熷垪閰嶇疆
<bean id="receiveDestination" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiTemplate"> <ref bean="jndiTemplate"/> </property> <property name="jndiName"> <value>queue/CreditReqeustReceiveQueue</value> </property> </bean>
銆銆鐒跺悗鎴戜滑鍐嶆潵閰嶇疆JmsTemplate緇勪歡銆傚湪渚嬬▼涓垜浠嬌鐢↗msTemplate102銆傚悓鏃朵嬌鐢╠efaultDestination灞炴ф潵鎸囧畾JMS鐩爣銆?/p>
銆銆 娓呭崟6. JMS妯℃澘閰嶇疆
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate102"> <property name="connectionFactory"> <ref bean="jmsQueueConnectionFactory"/> </property> <property name="defaultDestination"> <ref bean="destination"/> </property> <property name="receiveTimeout"> <value>30000</value> </property> </bean>
銆銆鏈鍚庢垜浠厤緗彂閫佽呭拰鎺ユ敹鑰呯粍浠躲傛竻鍗?鍜?鍒嗗埆鏄疭ender 鍜?Receiver瀵硅薄鐨勯厤緗?/p>
銆銆 娓呭崟7. JMS Sender閰嶇疆
<bean id="jmsSender" class="springexample.client.JMSSender"> <property name="jmsTemplate"> <ref bean="jmsTemplate"/> </property> </bean>
銆銆娓呭崟8. JMS Receiver閰嶇疆
<bean id="jmsReceiver" class="springexample.client.JMSReceiver"> <property name="jmsTemplate"> <ref bean="jmsTemplate"/> </property> </bean>
銆銆鎴戝啓浜?jiǎn)涓涓祴璇曠被錛屽懡鍚嶄負(fù)LoanApplicationControllerTest錛岀敤鏉ユ祴璇昄oanProc紼嬪簭銆傛垜浠彲浠ヤ嬌鐢ㄨ繖涓被鏉ヨ瀹氳捶嬈懼弬鏁頒互鍙?qiáng)璋冪敤淇$敤璇锋眰鏈嶅姟绫汇?/p>
銆銆 璁╂垜浠湅涓涓嬩笉浣跨敤Spring JMS API鑰屼嬌鐢ㄤ紶緇烰MS寮鍙戦斿緞鐨勬秷鎭彂閫佽呭疄渚嬨傛竻鍗?鏄劇ず浜?jiǎn)MessageSenderJMS綾婚噷鐨剆endMessage鏂規(guī)硶錛屽叾涓寘鍚簡(jiǎn)浣跨敤JMS API澶勭悊娑堟伅鐨勬墍鏈夊繀闇姝ラ銆?/p>
銆銆 娓呭崟9. 浼犵粺JMS瀹炰緥
public void sendMessage() { queueName = "queue/CreditRequestSendQueue"; System.out.println("Queue name is " + queueName); /* * Create JNDI Initial Context */ try { Hashtable env = new Hashtable(); env.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); env.put("java.naming.provider.url","localhost"); env.put("java.naming.factory.url.pkgs", "org.jnp.interfaces:org.jboss.naming"); jndiContext = new InitialContext(env); } catch (NamingException e) { System.out.println("Could not create JNDI API " + "context: " + e.toString()); } /* * Get queue connection factory and queue objects from JNDI context. */ try { queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup("UIL2ConnectionFactory"); queue = (Queue) jndiContext.lookup(queueName); } catch (NamingException e) { System.out.println("JNDI API lookup failed: " + e.toString()); } /* * Create connection, session, sender objects. * Send the message. * Cleanup JMS connection. */ try { queueConnection = queueConnectionFactory.createQueueConnection(); queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); queueSender = queueSession.createSender(queue); message = queueSession.createTextMessage(); message.setText("This is a sample JMS message."); System.out.println("Sending message: " + message.getText()); queueSender.send(message); } catch (JMSException e) { System.out.println("Exception occurred: " + e.toString()); } finally { if (queueConnection != null) { try { queueConnection.close(); } catch (JMSException e) {} } } }
銆銆鐜板湪錛屾垜浠潵鐪嬬湅浣跨敤浜?jiǎn)Spring鐨勬秷鎭彂閫佽呭疄渚嬨傛竻鍗?0鏄劇ず浜?jiǎn)MessageSenderSpringJMS綾諱腑send鏂規(guī)硶鐨勪唬鐮併?/p>
銆銆 娓呭崟10. 浣跨敤Spring API鐨凧MS瀹炰緥
public void send() { try { ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] { "spring-jms.xml"}); System.out.println("Classpath loaded"); JMSSender jmsSender = (JMSSender)appContext.getBean("jmsSender"); jmsSender.sendMesage(); System.out.println("Message sent using Spring JMS."); } catch(Exception e) { e.printStackTrace(); } }
銆銆濡傛?zhèn)ㄦ墍瑙侊紝閫氳繃浣跨敤閰嶇疆鏂囦歡錛屾墍鏈変笌綆$悊JMS璧勬簮鏈夊叧鐨勬楠ら兘灝嗕氦鐢盨pring瀹瑰櫒澶勭悊銆傛垜浠彧闇寮曠敤涓涓狫MSSender瀵硅薄錛岀劧鍚庤皟鐢ㄥ璞¢噷鐨剆endMessage鏂規(guī)硶銆?/p>
銆銆鍦ㄦ湰鏂囦腑錛屾垜浠湅鍒癝pring妗嗘灦鏄浣曚嬌鐢↗MS API綆鍖栧紓姝ユ秷鎭紶閫掋係pring鍘繪帀浜?jiǎn)鎵鏈変嬌鐢↗MS澶勭悊娑堟伅鎵蹇呴渶鐨勬牱鏈唬鐮侊紙渚嬪寰楀埌涓涓槦鍒楄繛鎺ュ伐鍘傦紝浠嶫ava浠g爜閲屽垱寤洪槦鍒楀拰浼?xì)璇濆璞″Q屽湪榪愯鏃朵嬌鐢ㄩ厤緗枃浠跺瀹冧滑榪涜緇勯厤錛夈傛垜浠彲浠ュ姩鎬佺殑浜ゆ崲JMS璧勬簮瀵硅薄錛岃屼笉蹇呬慨鏀逛換浣旿ava浠g爜錛岃繖瑕佹劅璋nversion of Control (IOC) 鍘熷垯鐨勫姏閲忋?/p>
銆銆鏃㈢劧寮傛娑堟伅浼犻掓槸SOA妗嗘灦鐨勬暣浣撴瀯鎴愰儴鍒嗭紝Spring寰堥傚悎綰沖叆鍒癝OA宸ュ叿闆嗐傛澶栵紝JMS綆$悊宸ュ叿錛堝Hermes錛変嬌寰楀垱寤恒佺鐞嗗拰鐩戠潱JMS璧勬簮鍙樺緱瀹規(guī)槗錛岀壒鍒槸瀵逛簬緋葷粺綆$悊鍛樻潵璇淬?/p>
鍘熸枃鍑哄:http://www.onjava.com/pub/a/onjava/2006/02/22/asynchronous-messaging-with-spring-jms.html