More Related Content
Similar to JavaEE6 Tutorial - Java Message Service_sys4u (20)
JavaEE6 Tutorial - Java Message Service_sys4u
- 1. - 1 -
Java Messaging Service
ì볞 죌ì : http://docs.oracle.com/javaee/6/tutorial/doc/bncdq.html
ë²ìì : ê¹íì ìì
ë²ììŒ : 2013 ë
06 ë
20 ìŒ
Chapter47.
Java Message Service Concept
ìŽ ì¥ììë ìë° ë©ìì§ ìë¹ì€(JMS) API ì ëíŽ ìê°íë€. ìŽ API 륌 ìŽì©íë©Ž
ìŽí늬ìŒìŽì
ëŽìì ì 뢰í ì ìê³ , ë¹ëêž°ì ìŽë©°, ëìší ì°ê²°ë(loosely coupled)
컀뮀ëìŒìŽì
ë°©ìì ìŽì©íì¬ ë©ìì§ë¥Œ ìì±, ì ì¡íê³ ìì íê³ ìœì ì ìê² ëë€. ìŽ
ì¥ììë ë€ì ëŽì©ë€ì ë€ë£¬ë€.
ï¬ JMS API ê°ì
ï¬ êž°ë³ž JMS API ê°ë
ï¬ JMS API íë¡ê·žëë° ëªšëž
ï¬ ê²¬ê³ í JMS ìŽí늬ìŒìŽì
ìì± ë°©ë²
ï¬ JavaEE ìŽí늬ìŒìŽì
ìì JMS 륌 ì¬ì©íë ë°©ë²
ï¬ JMS ì ëí ì¶ê° ì 볎
JMS API ê°ì
ìŽ ì¥ììë ë©ìì§(Messaging)ì ëí ê°ë
ì ì ìíê³ , JMS API ì ëí ëŽì©ê³Œ ìŽë¥Œ
ìŽì©í ì ìë ìí© ëíŽ êž°ì íë€. ë, JavaEE ìŽí늬ìŒìŽì
ëŽìì JMS API ê° ìŽë»ê²
ëìíëì§ì ëíŽìë ì€ëª
í ê²ìŽë€.
ë©ìì§ìŽë 묎ììžê°?
ë©ìì§ì ìíížìšìŽ 컎í¬ëížë ìŽí늬ìŒìŽì
ê°ì ì 볎륌 ì£Œê³ ë°ì ì
ìëë¡(Communication) íë ë°©ë²ìŽë€. ë³Žíµ ë©ìì§ ìì€í
ì P2P(peer to peer)
구조ìŽë€. ë©ìì§ íŽëŒìŽìžížë ë©ìì§ë¥Œ ì ì¡íêž°ë íê³ ë€ë¥ž ìŽë€ ë©ìì§ íŽëŒìŽìžížê°
ë³Žëž ë©ìì§ë¥Œ ìì íêž°ë íë€. ê°ê°ì ë©ìì§ íŽëŒìŽìžížë€ì ë©ìì§ë¥Œ ìì±(create)íê³
ì ì¡(send)íê³ ìì íê³ (receive) ìœì(read)ì ìë êž°ë¥ì ì ê³µíë ë©ìì§
ì€ê°ì(Messaging Agent)ì ì°ê²°ëë€.
ë©ìì§ì ìŽì©íë©Ž ëìšíê² ì°ê²°(loosely coupled)ëë ë¶ì°ë 컀뮀ëìŒìŽì
ì í ì ìê²
ëë€. ì¡ì ìë 목ì ì§(destination)ë¡ ë©ìì§ë¥Œ 볎ëŽê³ , ìì ì(recipient)ë ê·ž
목ì ì§ë¡ë¶í° ë©ìì§ë¥Œ ì»ìŽì¬ ì ìë€. íì§ë§, ì¡ì ì(sender)ì ìì ì(receiver)ë€ìŽ
- 2. - 2 -
컀뮀ëìŒìŽì
ì íêž° ìíŽ ê°ì ìì ì 몚ë ì€í ì€ìŒ íìë ìë€. ì¬ì€ ì¡ì ìë ìì ìì
ëíŽ ì í ìì§ ëª»íŽë 묎방íë€. ë§ì°¬ê°ì§ë¡ ìì ìë ì¡ì ìì ëíŽ ì íìê° ìë€.
ì¡ì ìì ìì ìê° ìê³ ììŽìŒ í ê²ì ë©ìì§ì íì(format)곌 목ì ì§ì ëí ì 볎ê°
ì ë¶ìŽë€. ìŽë° êŽì ìì ë©ìì§ì ìê²©ì§ ìŽí늬ìŒìŽì
ì ëí ì 볎륌 ìê³ ììŽìŒ íë
RMI(Remote Method Invocation: ì격 ë©ìë ížì¶)ì ê°ì ê²¬ê³ íê² ì°ê²°ë(tightly
coupled) 컀뮀ëìŒìŽì
ë°©ì곌 구ë³ëë€ê³ í ì ìë€.
ë©ìì§ì ë ìŽë©ìŒê³Œë ë€ë¥Žë€ê³ í ì ìëë°, ìŽë©ìŒì ì¬ë곌 ì¬ë ê°ì, í¹ì
ìíížìšìŽ ìŽí늬ìŒìŽì
곌 ì¬ë ê°ì 컀뮀ëìŒìŽì
ì íêž° ìíŽ ìŽì©ëì§ë§, ë©ìì§ì
ìíížìšìŽ ìŽí늬ìŒìŽì
ìŽë ìíížìšìŽ 컎í¬ëíž ê°ì 컀뮀ëìŒìŽì
ì ìíŽ ì¬ì©ëë€.
JMS API ë 묎ììžê°?
Java Message Service ë ìŽí늬ìŒìŽì
ìì ë©ìì§ë¥Œ ìì±íê³ , ì¡ì íê³ , ìì íê³ , ìœì
ì ìëë¡ ì ê³µë Java API ìŽë€. ìŽ API ë Sun 곌 ê·ž ìž ëªëª íížëë€ìŽ ì€ê³íìëë°,
ì¬êž°ìë Java ìžìŽë¥Œ ìŽì©íì¬ ë€ë¥ž ë©ìì§ êµ¬í첎ë€ê³Œ 컀뮀ëìŒìŽì
í ì ìëë¡ íë
ìŒë°ì ìž ìží°íìŽì€ë€ê³Œ ê·žì êŽë šë ëŽì©ë€ìŽ ì ìëìŽ ìë€.
JMS API ìë, íë¡ê·žëëšžê° ìììŒ íë ëŽì©ì ìµìííë©Žìë, ìžë šë ë©ìì§
ìŽí늬ìŒìŽì
ì ë§ë€ ì ìëë¡ íë 충ë¶í êž°ë¥ë€ìŽ í¬íšëìŽ ìë€. ë, JMS
ìŽí늬ìŒìŽì
ìŽ ëìŒí ëë©ìž ëŽì ìë ì¬ë¬ JMS íë¡ë°ìŽëë€ê³Œ ì°ëí ì ìëë¡
ìŽìì±ì ê·¹ëííìë€.
JMS API ë ëìší ì°ê²°ì 컀뮀ëìŒìŽì
ì ê°ë¥íê² í ë¿ë§ ìëëŒ ë€ì êž°ë¥ë ì§ìíë€.
ï¬ ë¹ëêž°ì±(Asynchronous): JMS íë¡ë°ìŽëë ë©ìì§ë€ìŽ ëì°©íë©Ž ë°ë¡
íŽëŒìŽìžížìê² ë©ìì§ë¥Œ ì ë¬íŽì€ë€. íŽëŒìŽìžížê° ë©ìì§ë¥Œ ì»êž° ìíŽ
íë¡ë°ìŽëìê² ìì²ì í íìê° ìë€.
ï¬ ì 뢰ì±(Reliable): JMS API ë ë©ìì§ê° í ë², ê·žëŠ¬ê³ ëš í ë²ë§ ì ë¬ëëë¡
볎ì¥íë€. ë©ìì§ê° ì ì€ëê±°ë ì€ë³µëë ë±ì 묞ì 륌 íŽê²°íë ë®ì ë 벚(low
level)ì êž°ë¥ êµ¬ì¡°ë¥Œ ê°ì¶ê³ ìë€.
íì¬ JMS ëª
ìžì ë²ì ì 1.1 ë²ì ìŽë€. JMS ëª
ìžë¥Œ íìžíê³ ì¶ìŒë©Ž ë€ì URL ì ìŽì©íêžž
ë°ëë€: http://www.oracle.com/technetwork/java/index-jsp-142945.html
ìŽë€ ìí©ìì JMS API 륌 ìŽì©í ì ìëê°?
ë€ì곌 ê°ì ìí©ìì ìí°íëŒìŽìŠ ìŽí늬ìŒìŽì
ë€ì RPC(Remote Procedure Call)ì
ê°ì ê²¬ê³ í ì°ê²°ë°©ì ëì ë©ìì§ API 륌 ì ííë 겜í¥ìŽ ìë€.
ï¬ ì»Ží¬ëížê° ë€ë¥ž 컎í¬ëížì ìží°íìŽì€ì ìì¡Žíì§ ë§ììŒ í ë, ìŠ ì»Ží¬ëížë€ìŽ
ììœê² êµì²Žë ì ììŽìŒ í ë
- 3. - 3 -
ï¬ ëªšë 컎í¬ëíž í¹ì ìŽí늬ìŒìŽì
ë€ìŽ ê°ì ìì ì ì€í ì€ìŽ ìëëëŒë
컀뮀ëìŒìŽì
ìŽ ê°ë¥íŽìŒ í ë
ï¬ ìŽí늬ìŒìŽì
ì ë¹ìŠëì€ ëªšëžìŽ ì ì¡í ë©ìì§ì ëí ì²ëŠ¬ 결곌륌 ìŠê°ì ìŒë¡
ìëµ ë°ì íìê° ìì ë
ì륌 ë€ìŽë³Žë©Ž, ìëì°š ê³µì¥ìì ì¬ì©ëë ìí°íëŒìŽìŠ ìŽí늬ìŒìŽì
ì 컎í¬ëížë€ì
ë€ì곌 ê°ì ë°©ììŒë¡ JMS API 륌 ì¬ì©í ì ìë€.
ï¬ ì¬ê³ 컎í¬ëížë ìŽë€ ì íì ì¬ê³ ìì€ìŽ ìŒì ë ìŽíë¡ ëšìŽì§ë©Ž ê³µì¥
컎í¬ëížìê² ë©ìì§ë¥Œ ë³ŽëŒ ì ìë€. 귞늬íì¬ ìë찚륌 ë ë§ìŽ ë§ë€ ì ìë€.
ï¬ ê³µì¥ ì»Ží¬ëížë ë¶í 컎í¬ëížë€ìê² ë©ìì§ë¥Œ ë³ŽëŽ íìí ë¶íë€ì 조늜í ì
ìë€.
ï¬ ë¶í 컎í¬ëížë ì¬ê³ 컎í¬ëížë 죌묞 컎í¬ëížë¡ ë©ìì§ë¥Œ ë³ŽëŽ ì¬ê³ ìëì
ê°±ì íê³ ìë¡ìŽ ë¶íì 죌묞í ì ìë€.
ï¬ ê³µì¥ ì»Ží¬ëížì ë¶í 컎í¬ëíž ëªšë ì ì° ì»Ží¬ëížë¡ ë©ìì§ë¥Œ ë³ŽëŽ ìì°ì ê°±ì í
ì ìë€.
ï¬ ì
묎íìì ê°±ì ë 칎íë¡ê·žë¥Œ íìŽíìŒë¡ ë°íí ì ìë€.
ìŽë° ë°©ììŒë¡ ë©ìì§ì ìŽì©íë©Ž ê° ì»Ží¬ëížë€ìŽ ë€ížìí¬ë 늬ìì€ë¥Œ 곌ëíê² ì ì íì§
ìê³ ë íšìšì ìŒë¡ ìížìì©í ì ìë€. 귞늌 47-1 륌 볎멎 ì ìì 륌 ìœê² ìŽíŽí ì ìì
ê²ìŽë€.
ì ì¡°ì
ì JMS API 륌 ìŽì©íë ìí°íëŒìŽìŠ ìŽí늬ìŒìŽì
ì í ììŒ ë¿ìŽë€. ì맀(retail)
ìŽí늬ìŒìŽì
, êžìµ ìë¹ì€ ìŽí늬ìŒìŽì
, ìë£ ìë¹ì€ ìŽí늬ìŒìŽì
ë± ìë§ì
ìŽí늬ìŒìŽì
ë€ìŽ ë©ìì§ì ìŽì©í ì ìë€.
JMS API ë JavaEE íë«íŒìì ìŽë»ê² ëìíëê°?
1998 ë
JMS API ê° ì²ì ìê°ëìì ë, ìŽê²ì ê°ì¥ ì€ìí 목íë Java ìŽí늬ìŒìŽì
ìŽ
IBM ì MQSeries ì ê°ì êž°ì¡Žì ì¡Žì¬íë ë©ìì§ êž°ë° ë¯žë€ìšìŽ(MOM Messaging
Oriented Middleware)ì ì ê·Œí ì ìëë¡ íë ê²ìŽìë€. ê·ž ë ìŽíë¡, ì ë§ì ê°ë°
ì
첎ë€ìŽ JMS API ì ì ìíê³ ìŽë¥Œ 구ííŽ ììŒë©°, ê·žëì íì¬ì JMS ì íë€ì
ìí°íëŒìŽìŠ í겜ì ìí ë©ìì§ êž°ë¥ì ì벜íê² ì ê³µí ì ìê² ëìë€.
- 4. - 4 -
Java EE íë«íŒì 1.3 ë²ì ë°°í¬ë¶í° ììë JMS API ë íë«íŒì íµì¬ì ìž ë¶ë¶ìŽ ëìŽ
ììŒë©°, ë§ì ìŽí늬ìŒìŽì
ê°ë°ìë€ì JavaEE 컎í¬ëížë¥Œ ìŽì©íì¬ ë©ìì§ êž°ë¥ì 구íí
ì ìê² ëìë€.
JavaEE íë«íŒ ëŽì íì¬ëìŽ ìë JMS API ìë ë€ì곌 ê°ì êž°ë¥ë€ìŽ í¬íšëìŽ ìë€.
ï¬ ìŽí늬ìŒìŽì
íŽëŒìŽìžíž, ìí°íëŒìŽìŠ ìë°ë¹ìŠ(EJB), ê·žëŠ¬ê³ ì¹ ì»Ží¬ëížë€ì
JMS ë©ìì§ë¥Œ ì ì¡íê±°ë ëêž°íë ë°©ììŒë¡ ìì í ì ìë€. ì¶ê°ì ìŒë¡
ìŽí늬ìŒìŽì
íŽëŒìŽìžížë JMS ë©ìì§ë¥Œ ë¹ëêž°ì ìŒë¡ ìì í ìë ìë€. (íì§ë§,
ì í늿ì JMS API 륌 ì§ìí íìê° ìë€.)
ï¬ ìí°íëŒìŽìŠ ë¹ì í ì¢
ë¥ìž ë©ìì§ ëëŠ¬ëž ë¹(MDB, Message-Driven Bean)ì
ë©ìì§ ìë¹ë¥Œ ë¹ëêž°ì ìŒë¡ ìíí ì ìë€. JMS íë¡ë°ìŽëë ë©ìì§ ë늬ëž
ë¹ì ìŽì©íì¬ ë©ìì§ì ëí ëì ì²ëŠ¬ êž°ë¥ì ë¶ê°ì ìŒë¡ 구íí ì ìë€.
ï¬ ë©ìì§ì ëí ì¡/ìì êž°ë¥ì ë¶ì° ížëìì
ì ì°žê°í ì ìëë°, ìŽë JMS ì ëí
ìì
곌 ë°ìŽí°ë² ìŽì€ì ëí ìì
ìŽ ëšìŒ ížëìì
ëŽìì ì²ëŠ¬ë ì ììì
ì믞íë€.
JMS API ë ìí°íëŒìŽìŠ ìŽí늬ìŒìŽì
ì ê°ë° ë°©ìì ëšìíìí€ê³ , JavaEE 컎í¬ëížì
êž°ì¡Žì ì¡Žì¬íë ë©ìì§ ìì€í
ê°ì ëìšíê³ , ì 뢰ë¡ì°ë©°, ë¹ëêž°ì ìž ìížìì©ì ê°ë¥ìŒ
íšìŒë¡ìš Java EE íë«íŒì ê°ì¹ë¥Œ í¥ìì쌰ë€. ê°ë°ìë€ì í¹ì ë¹ìŠëì€ ìŽë²€ížì ëíŽ
ëìíë ë©ìì§ ëëŠ¬ëž ë¹ì ì¶ê°íšìŒë¡ìš êž°ì¡Žì ìì±ëìŽ ìë ë¹ìŠëì€ê° ìë¡ìŽ ëìì
íëë¡ êž°ë¥ì ììœê² ì¶ê°í ì ìë€. ë, JavaEE íë«íŒì ë¶ì° ížëìì
곌 ë©ìì§ì ëí
ëì ì²ëŠ¬ êž°ë¥ì ì ê³µíšìŒë¡ìš JMS API 륌 í¥ìì쌰ë€. ë ììží ì 볎륌 ìê³ ì¶ë€ë©Ž
ìí°íëŒìŽìŠ ìë°ë¹ìŠ 3.1 ê·ê²©(Specification)륌 ì°žê³ íêž° ë°ëë€.
JMS íë¡ë°ìŽëë JavaEE 컀ë¥í° ìí€í
ì²ë¥Œ ì¬ì©íê³ ìë ìŽí늬ìŒìŽì
ìë²ì íµí©ë
ì ìë€. ê°ë°ìë€ì 늬ìì€ ìŽëí°(resource adapter)륌 íµíŽ JMS íë¡ë°ìŽëì ì ê·Œí
ì ìë€. ìŽ êž°ë¥ì JMS íë¡ë°ìŽëê° ì¬ë¬ ê°ì ìŽí늬ìŒìŽì
ìë²ì íë¬ê·žìž ëë ê²ìŽ
ê°ë¥íëë¡ íŽ ì£Œë©°, ë ìŽí늬ìŒìŽì
ìë²ë€ìŽ ì¬ë¬ ê°ì JMS íë¡ë°ìŽëì ì°ëí ì
ìëë¡ íŽ ì€ë€. ìŽì ëí ììží ì 볎ë JavaEE 컀ë¥í° ìí€í
ì² ê·ê²© v1.6 ì íìžíŽ
볎Ʞ ë°ëë€.
JMS API Ʞ볞 ê°ë
ìŽ ì¥ììë JMS API ì ê°ì¥ Ʞ볞ì ìž ê°ë
ì ëíŽ ë€ë£° ê²ìžë°, ìŽ ëŽì©ì JMS API 륌
ìŽì©íë ê°ëší ìŽí늬ìŒìŽì
ì ìì±íêž° ìíŽ ë°ëì ìììŒ í ê²ìŽë€.
ìŽ ë€ì ì¥ììë JMS API ì íë¡ê·žëë° ëªšëžì ëíŽ ë€ë£° ê²ìŽë€. ê·ž ë€ì ìê°ë ì¥
ë€ììë ë©ìì§ ëëŠ¬ëž ë¹ì ìŽì©íë ìŽí늬ìŒìŽì
ì ìì±íêž° ìíŽ ìììŒ íë ê³ êž
ê°ë
ì ìê°í ê²ìŽë€.
JMS API ìí€í
ì²
- 5. - 5 -
JMS ìŽí늬ìŒìŽì
ì ë€ì ë¶ë¶ë€ë¡ 구ì±ëë€.
ï¬ JMS íë¡ë°ìŽë(JMS Provider)ë JMS ìží°íìŽì€ë¥Œ 구ííê³ êŽëŠ¬/ì ìŽ êž°ë¥ì
ì ê³µíë ë©ìì§ ìì€í
ìŽë€. JavaEE íë«íŒì 구í첎(Platform
Implementation)ë JMS íë¡ë°ìŽë륌 í¬íšíë€.
ï¬ JMS íŽëŒìŽìžíž(JMS Client)ë Java ìžìŽë¡ ìì±ë íë¡ê·žëšìŽê±°ë 컎í¬ëížë¡
ë©ìì§ë¥Œ ìì°íê±°ë ìë¹íë€. JavaEE ìŽí늬ìŒìŽì
컎í¬ëížëŒë©Ž ìŽë€ ê²ìŽëŒë
JMS íŽëŒìŽìžížë¡ì ëìí ì ìë€.
ï¬ ë©ìì§ë JMS íŽëŒìŽìžíž ì¬ìŽì ì 볎륌 ì£Œê³ ë°ë ë°ì ì¬ì©ëë ê°ì²ŽìŽë€.
ï¬ êŽëŠ¬ ëì ê°ì²Ž(Administered Object)ë ì¬ì ì ì€ì ëë JMS ê°ì²Žë¡,
íŽëŒìŽìžížìì ì¬ì©íêž° ìíŽ êŽëŠ¬ìê° ìì±íë ê°ì²ŽìŽë€. JMS êŽëŠ¬ ê°ì²Žìë ë
ê°ì§ê° ìëë°, íëë 목ì ì§(destination)ìŽê³ ë€ë¥ž íëë 컀ë¥ì
í©í 늬
(connection factory)ìŽë€. ìŽì ëí ëŽì©ì [JMS êŽëŠ¬ ëì ê°ì²Ž] ì¥ìì ì€ëª
ë
ê²ìŽë€.
귞늌 47-2 ë ìŽ ìž ë¶ë¶ìŽ ìŽë»ê² ìížìì©íëì§ë¥Œ 볎ì¬ì€ë€. êŽëŠ¬ íŽì ìŽì©íë©Ž JNDI
ë€ìì€íìŽì€ ëŽì 목ì ì§ì 컀ë¥ì
í©í 늬 ì 볎륌 ë°ìžë(bind)í ì ìë€. ê·žë ê² ëë©Ž,
JMS íŽëŒìŽìžížê° íŽë¹ ë€ìì€íìŽì€ ëŽì ìë êŽëŠ¬ ëì ê°ì²Žì ì ê·Œíêž° ìíŽ ìì
죌ì
(resource injection)ì ìŽì©í ì ìê² ëë€. ê·žëŠ¬ê³ ê·ž í JMS íë¡ë°ìŽë륌 íµíŽ
ëìŒí ê°ì²Žì ë
ŒëŠ¬ì ìž ì»€ë¥ì
ì 맺ì ì ìê² ëë ê²ìŽë€.
ë©ìì§ ëë©ìžë€(Messaging Domains)
JMS API ê° ìê°ëêž° ì ì ëë¶ë¶ì ë©ìì§ ì íë€ì ì ëì (point-to-point) ë°©ììŽë
ë°í/구ë
(publish/subscribe) ë°©ì ì€ ë ì€ íëë§ ì§ìíìë€. JMS ê·ê²©ì ê°ê°ì ì ê·Œ
ë°©ìì ìíŽ ë¶ëŠ¬ë ëë©ìžì ì ê³µíê³ , ê° ëë©ìž ë³ë¡ ë°ëŒìŒ í ê·ì¹ë€ì ì ìíë€.
ë
늜ì ìŒë¡ ëìíë (stand-alone) JMS íë¡ë°ìŽëë í ê°ì§ í¹ì ë ê°ì§ ë°©ì 몚ë륌
구íí ì ìë€. JavaEE íë¡ë°ìŽëë ë ê°ì§ ëë©ìž 몚ë륌 구ííŽìŒ íë€.
ì¬ì€, ëë¶ë¶ì JMS API 구í첎ë€ì ì ëì ë°©ì ëë©ìžìŽë ë°í/구ë
ë°©ì ëë©ìž 몚ë륌
ì§ìíê³ ììŒë©°, ëªëª JMS íŽëŒìŽìžížë€ì ëšìŒ ìŽí늬ìŒìŽì
ëŽìì ë ê°ì§ ëë©ìž
몚ë륌 ì¬ì©íêž°ë íë€. ìŽë° ë°©ìì ìŽì©íì¬ JMS API ë ë©ìì§ ì íë€ì êž°ë¥ê³Œ
ì ì°ì±ì í€ì ë€ê³ í ì ìë€.
JMS ê·ê²©ì ì¬êž°ì í 걞ì ë ëìê°ë€: ì쪜 ëë©ìžì ì ê·Œíêž° ìíŽ ëšìŒ JMS API 륌
ìŽì©í ì ìê² ë ê²ìŽë€. ë€ì ì¥ììë ììì ìê°í ë ê°ì§ì ë©ìì§ ëë©ìžì ëí
- 6. - 6 -
ëŽì©ê³Œ ìŽë€ì ìŽì©íêž° ìí ê³µíµ ìží°íìŽì€(common interface)륌 ì¬ì©íë ë°©ë²ì ë€ë£°
ê²ìŽë€.
ì ëì ë©ìì§ ëë©ìž(Point-to-Point Messaging Domain)
ì ëì ì íìŽë ìŽí늬ìŒìŽì
ì ë©ìì§ í(Message Queue), ì¡ì ì(sender),
ìì ì(receiver)ì ê°ë
ì êž°ë°ìŒë¡ ë§ë€ìŽì§ë€. ê°ë³ ë©ìì§ë€ì í¹ì íì ì ë¬ëê³ ,
ìì íŽëŒìŽìžížë€ì ë©ìì§ë¥Œ ëŽê³ ìêž° ìíŽ ìì±ë íë¡ë¶í° ë©ìì§ë¥Œ ì¶ì¶íë€. íë
ë©ìì§ê° ìë¹ëê±°ë ë§ë£ëêž° ì ê¹ì§ 몚ë ë©ìì§ë¥Œ 볎ì íê³ ìê² ëë€.
귞늌 47-3 ì ìê°ëìŽ ìë ì ëì ë©ìì§ ë°©ìì ë€ì곌 ê°ì í¹ì§ì ì§ëê³ ìë€.
ï¬ ê°ë³ ë©ìì§ë€ì ëš íëì ìë¹ìì ìíŽ ìë¹ëë€.
ï¬ ë©ìì§ì ì¡ì ìì ìì ìë ìê°ì 구ì ëì§ ìê³ ë©ìì§ë¥Œ ì£Œê³ ë°ì ì ìë€.
ìì ìë ìžì ë ë©ìì§ë¥Œ ê°ì žì¬ ì ììŒë©°, ì¡ì ìê° ë©ìì§ë¥Œ ì¡ì íê³ ìì ë
ì€í ì€ìŽì§ ììë ëë€.
ï¬ ìì ìë ë©ìì§ë¥Œ ì±ê³µì ìŒë¡ ì²ëŠ¬íëì§ë¥Œ ê³ ì§íë€.
ì ëì ë©ìì§ ë°©ìì ì ì¡ë ë©ìì§ê° ëš íëì ìë¹ìì ìíŽ ì±ê³µì ìŒë¡ ì²ëŠ¬ëìŽìŒ
íë 겜ì°ì ìŽì©í ì ìë€.
ë°í/구ë
ë©ìì§ ëë©ìž(Publish/Subscribe Messaging Domain)
ë°í/구ë
(pub/sub) ì íìŽë ìŽí늬ìŒìŽì
ì ë©ìì§ë¥Œ íëì í íœ(topic)ì ì ì¡íëë°,
ìŽë ê²ìí(Bulletin Board)곌 ë¹ì·íê² ìëíë€ê³ 볌 ì ìë€. ë°íì(Publisher)ì
구ë
ì(Subscriber)ë€ì ë³Žíµ ìµëª
(anonymous)ìŽê³ , ëì ìŒë¡ 컚í
íž ê³ìžµ(content
hierarchy)ì ë°ííê±°ë ê·žê²ì 구ë
í ì ìë€. ìŽ ìì€í
ì ì¬ë¬ ë°íìê° ì ë¬í
í íœë€ì ì¬ë¬ 구ë
ììê² ëëìŽ(distributing) 죌ë ìí ì ëŽë¹íë€. í íœë€ì íì¬ì
구ë
ìë€ìê² ë©ìì§ë¥Œ ì ë¬ëë ëìë§ ë©ìì§ë¥Œ ì ì§íë€.
ë°í/구ë
ë©ìì§ìë ë€ì곌 ê°ì í¹ì§ìŽ ìë€.
ï¬ ê° ë©ìì§ë€ì ì¬ë¬ 구ë
ìì ìíŽ ìë¹ë ì ìë€.
- 7. - 7 -
ï¬ ë°íìì 구ë
ì ì¬ìŽìë ìê°ì ìì¡Žì±(timing dependency)ê° ì¡Žì¬íë€. ìŽë€
í íœì 구ë
íë íŽëŒìŽìžížë 구ë
íêž° ììí ìŽíì ë°íë ë©ìì§ë§ ìë¹í ì
ìë€. ê·žëŠ¬ê³ ë©ìì§ë¥Œ ìë¹íêž° ìíŽ ì§ìì ìŒë¡ íì±í(active)ëìŽ ììŽìŒ íë€.
JMS API ë ìŽ ìê°ì ìì¡Žì±ì ìŽë ì ë ë늬Ʞ ìíŽ êµ¬ë
ìê° ì§ì 구ë
(durable
subscriptions)ì í ì ìë êž°ë¥ì ì ê³µíë€. ìŽ ë°©ìì ìŽì©íë©Ž 구ë
ìê° ëìíê³ ìì§
ìì ìì ì ì ì¡ë ë©ìì§ë¥Œ ìì í ì ìê² ëë€. ì§ì 구ë
ë°©ìì íì ì ì°ì±ê³Œ
ì 뢰ì±ì ë¶ì¬íë©Žìë íŽëŒìŽìžížê° ì¬ë¬ ìì ììê² ë©ìì§ë¥Œ ì ì¡í ì ìê² íŽ ì€ë€.
ìŽì ëí ììží ì 볎ë [ì§ì 구ë
ìì±íêž°] ì¥ì ì°žê³ íêž° ë°ëë€.
ê° ë©ìì§ê° ì¬ë¬ ìë¹ìì ì ë¬ëìŽ ì²ëŠ¬ëìŽìŒ íë€ë©Ž ë°í/구ë
ë°©ìì ìŽì©íë©Ž ëë€.
귞늌 47-4 ìì ë°í/구ë
ë°©ììŽ ì€ëª
ëìŽ ìë€.
ê³µíµ ìží°íìŽì€ë¥Œ ìŽì©íì¬ íë¡ê·žëë°íêž°
JMS API ë²ì 1.1 ì ìŽì©íì¬ ìì±ë ìœëë ì ëì ìŽë ë°í/구ë
ëë©ìž ë ì€ íëìë§
ì°ëí ì ììë€. ì¬ì©ëë 목ì ì§ë ëë©ìžì ë°ëŒ ë€ë¥Žê³ , ìŽí늬ìŒìŽì
ì ëì ë°©ìë
í륌 ì¬ì©íë í íœì ì¬ì©íëì ë°ëŒ ë€ë¥Žêž° ë묞ìŽë€. íì§ë§ ìœë ì첎ë 몚ë ëë©ìžì
ëìŒíê² ì¬ì©ë ìë ìê³ , ê·žë ê² ëë©Ž ìŽí늬ìŒìŽì
ìŽ ë³Žë€ ì ì°íê³ ì¬ì¬ì© ê°ë¥íëë¡
ìì±ë ì ìë€. ìŽ ìì ììë ìŽ ê³µíµ ìží°íìŽì€ì ëíŽ ìžêžíê³ ì€ëª
í ê²ìŽë€.
ë©ìì§ ìë¹
ë©ìì§ ì íë€ì íìì ìŒë¡ ë¹ëêž°ì ìŒë¡ ëìíë€: ë©ìì§ë¥Œ ìì°íê±°ë ìë¹íë ì¬ìŽì
ê·Œìì ìž ìê°ì ìì¡Žì±ì ì¡Žì¬íì§ ìëë€. íì§ë§, JMS ê·ê²©ììë ìŽ ì©ìŽë¥Œ ì¢ ë
ìë°íê² ì¬ì©íê³ ìë€. ë©ìì§ë€ì ë€ì ë ê°ì§ ë°©ììŒë¡ ìë¹ë ì ìë€.
ï¬ ëêž°í ì²ëŠ¬: 구ë
ìë ìì ìê° receive ë©ìë륌 ížì¶íì¬ ëª©ì ì§ë¡ë¶í° ë©ìì§ë¥Œ
ëª
ìì ìŒë¡ ê°ì žê°ë€. receive ë©ìëë ë©ìì§ê° ëì°©í ë ê¹ì§ ëêž°í ìë ìê³ ,
ì§ì ë ìŒì ìê° íë ëŽì ë©ìì§ê° ëì°©íì§ ììŒë©Ž íììì ì²ëŠ¬í ìë ìë€.
ï¬ ë¹ëêž°í ì²ëŠ¬: íŽëŒìŽìžížë ìë¹ìì ë©ìì§ ëŠ¬ì€ë(message listener)륌 ë±ë¡í
ì ìë€. ë©ìì§ ëŠ¬ì€ëë ìŽë²€íž 늬ì€ëì ì ì¬íë€. ìžì ë ë©ìì§ê° 목ì ì§ì
ëì°©íë©Ž, JMS íë¡ë°ìŽëë 늬ì€ëì onMessage ë©ìë륌 ížì¶íì¬ ë©ìì§ë¥Œ
ì ë¬íëë°, ìŽ ë©ìëë ë©ìì§ì 컚í
ìž ì ëíŽ ëìíë€.
- 8. - 8 -
JMS API Ʞ볞 ê°ë
JMS ìŽí늬ìŒìŽì
ì Ʞ볞ì ìž êµ¬ì±ììë€ì ë€ì곌 ê°ë€.
ï¬ êŽëŠ¬ ëì ê°ì²Ž: 컀ë¥ì
í©í 늬ì 목ì ì§
ï¬ ì»€ë¥ì
ë€(connections)
ï¬ ìžì
ë€(sessions)
ï¬ ë©ìì§ ìì±ìë€(message producers)
ï¬ ë©ìì§ ìë¹ìë€(message consumers)
ï¬ ë©ìì§ë€(messages)
귞늌 47-5 륌 볎멎 ìì ê°ì²Žë€ìŽ ìŽë»ê² ìížìì©íëì§ë¥Œ íìží ì ìë€.
ìŽ ì¥ììë 몚ë ê°ì²Žë€ì ê°ëµíê² ì€ëª
í ê²ìŽê³ ìŽë€ì ì¬ì©íêž° ìí ëª
ë ¹ìŽì ê°ëší
ìœë ì¡°ê°ì 볎ì¬ì€ ê²ìŽë€. ê·žëŠ¬ê³ ë§ì§ë§ìë JMS API ì ììž ì²ëŠ¬ ë°©ë²ì ëíŽ ê°ëµí
ì€ëª
í ê²ìŽë€.
몚ë ê°ì²Žë€ì íµí©íë ìì ë ìŽ ì¥ì ë§ì§ë§ì ì¶ê°ëìŽ ìë€. ë ììží ëŽì©ì ìê³
ì¶ìŒë©Ž JavaEE API 묞ì ì€ JMS API 묞ì륌 íìžíêž° ë°ëë€.
JMS êŽëŠ¬ ëì ê°ì²Ž(JMS Administered Objects)
JMS ì ë ë¶ë¶ìž 목ì ì§(destination)곌 컀ë¥ì
í©í 늬(connection factories)ë
íë¡ê·žëšì ìŒë¡ êŽëŠ¬ëêž° 볎ë€ë êŽëŠ¬ìì ìíŽ êŽëŠ¬ëë€. ìŽ ê°ì²Žë€ì ìí êž°ì ì JMS
API ì 구í ë°©ì곌ë ìì í ë¬ëŒ ë³ŽìŒ ê²ìŽë€. ê·žë¬ë¯ë¡, ìŽ ê°ì²Žë€ì ëí ìì
ì ìŽë€
íë¡ë°ìŽë륌 ì¬ì©íëì ë°ëŒ ë¬ëŒì§ ì ìë ìì
ìŒë¡ êŽëŠ¬ìê° ì²ëŠ¬íŽìŒ íë ê²ìŽë€.
- 9. - 9 -
JMS íŽëŒìŽìžížë€ì ìŽ ê°ì²Žì ì ê·Œíêž° ìíŽ ê³µíµìŒë¡ ì¬ì©ë ì ìë ìží°íìŽì€ë¥Œ
ìŽì©íë©°, ê·žëì íŽëŒìŽìžíž ìŽí늬ìŒìŽì
ì ìœëì ìì ìŽ ìê±°ë ì죌 ì ì ìì ë§ìŒë¡
íë ìŽìì JMS API 구í첎ì ì°ëí ì ìê² ëë€. ë³Žíµ êŽëŠ¬ìë êŽëŠ¬ ëì ê°ì²Žë€ì
JNDI ë€ìì€íìŽì€ ëŽì ì€ì íë©°, ê·ž ë€ JMS íŽëŒìŽìžížë€ìŽ ìì 죌ì
ì ìŽì©íì¬ ìŽ
ê°ì²Žë€ì ì ê·Œíê² ëë€.
GlassFish ìë²ë¥Œ ìŽì©íë€ë©Ž, create-jms-resource ëŒë ëª
ë ¹ìŽë¥Œ ìŽì©íê±°ë êŽëŠ¬ì
ìœìì ìŽì©íì¬ ì»€ë¥í° ìì íŒìì JMS êŽëŠ¬ ëì ê°ì²Žë¥Œ ìì±í ì ìë€. ë, ì§ì
ìŽí늬ìŒìŽì
ì ì¶ê°í ì ìë glassfish-resource.xml ëŒë ìŽëŠì íìŒì íìí ììì
ì¶ê°í ìë ìë€.
NetBeans IDE ìë GlassFish ìë²ì JMS ììë€ì ìì±í ì ìë ë§ë²ì¬ êž°ë¥ìŽ
ì¶ê°ëìŽ ìë€. ììží ëŽì©ì [NetBeans IDE 륌 ìŽì©íì¬ JMS ìì ì¶ê°íêž°]ì¥ì
ì°žê³ íêž° ë°ëë€.
JMS 컀ë¥ì
í©í 늬(JMS Connector Factories)
컀ë¥ì
í©í 늬ë íŽëŒìŽìžížê° íë¡ë°ìŽëì ì ê·Œíêž° ìíŽ ì¬ì©íë ê°ì²ŽìŽë€. 컀ë¥ì
í©í 늬ë êŽëŠ¬ìê° ì€ì í 컀ë¥ì
ì ëí ì€ì íëŒë¯ží° ê°ì ì§í©ì í¬íšíê³ ìë€. ê°
컀ë¥ì
í©í 늬ë ConnectionFactory, QueueConnectionFactory í¹ì
TopicConnectionFactory ì ìžì€íŽì€ìŽë€. 컀ë¥ì
í©í 늬륌 ìì±íë ë°©ë²ì [NetBeans
IDE 륌 ìŽì©íì¬ JMS ìì ì¶ê°íêž°]ì¥ì ì°žê³ íêž° ë°ëë€.
ë³Žíµ JMS íŽëŒìŽìžíž íë¡ê·žëšì ì ë¶ë¶ìì 컀ë¥ì
í©í 늬 ììì ConnectionFactory
ë³ìì 죌ì
íì¬ ì¬ì©íê² ëë€. ì륌 ë€ìŽ ë€ì ìœëë JNDI ìŽëŠìŽ
jms/ConnectionFactory ìž ììì ì§ì íì¬ ê·žê²ìŽ ConnectionFactory ê°ì²Žì í ë¹ëê²
íê³ ìë€.
@Request(lookup = âjms/ConnectionFactoryâ)
private static ConnectionFactory connectionFactory;
ìì ê°ìŽ JavaEE ìŽí늬ìŒìŽì
ììë JMS êŽëŠ¬ ëì ê°ì²Žë€ì ë³Žíµ jms ëŒë íì
컚í
ì€íž ëª
ì ì¶ê°íì¬ ì¬ì©íë€.
JMS 목ì ì§(JMS Destination)
목ì ì§ë íŽëŒìŽìžížê° ë©ìì§ë¥Œ ì ë¬íêž° ìíŽ ì¬ì©íë ëì(target)ìŽê±°ë ë©ìì§ë¥Œ
ìë¹íêž° ìíŽ ì§ì í ê·Œì(source)ìŽë€. ì ëì ë©ìì§ ëë©ìžìì 목ì ì§ë
í(queue)ëŒê³ ë¶ëŠ¬ê³ , ë°í/구ë
ë©ìì§ ëë©ìžììë í íœ(topic)ìŽëŒê³ ë¶ëŠ°ë€. íëì
JMS ìŽí늬ìŒìŽì
ì ì¬ë¬ ê°ì íì í íœì (ë ë€) ì¬ì©í ì ìë€. 목ì ì§ë¥Œ ìì±íë
ë°©ë²ì ëíŽ ìê³ ì¶ìŒë©Ž [NetBeans IDE 륌 ìŽì©íì¬ JMS ìì ì¶ê°íêž°]ì¥ì ì°žê³ íêž°
ë°ëë€.
- 10. - 10 -
GlassFish ìë²ë¥Œ ì¬ì©íë 목ì ì§ë¥Œ ìì±íêž° ìíŽìë, ê·ž 목ì ì§ë¥Œ ìí JNDI ìŽëŠì
ì ìí JMS 목ì ì§ ìì(JMS destination resource)륌 ìì±íì¬ìŒ íë€.
GlassFish ìë²ìì 구íë JMS ë ê° ëª©ì ì§ ììì ì€ì 묌늬ì ìž ëª©ì ì§ë¥Œ ì°žì¡°íë€.
êŽëŠ¬ìë 묌늬ì ìž ëª©ì ì§ë¥Œ ëª
ìì ìŒë¡ ìì±í ì ìëë°, ë§ìœ ê·žë¬ì§ ììë€ë©Ž
ìŽí늬ìŒìŽì
ìë²ê° ìŽê²ìŽ íìí ë ìëìŒë¡ ìì±íê³ êŽëŠ¬ìê° ëª©ì ì§ ììì ì ê±°í
ë ì ê±°íê² ëë€.
íŽëŒìŽìžíž íë¡ê·žëš ëŽì 컀ë¥ì
í©í 늬륌 죌ì
íë ê²ê³Œ ë§ì°¬ê°ì§ë¡, ë³Žíµ ëª©ì ì§ ììë
죌ì
íì¬ ì¬ì©íë€. 컀ë¥ì
í©í 늬ìë ë¬ëŠ¬, 목ì ì§ë íëì ëë©ìžìë§ ì§ì ëë€. í íœê³Œ
í 몚ë륌 ì¬ì©íë ìŽí늬ìŒìŽì
ì ìì±íŽìŒ íë€ë©Ž 목ì ì§ë¥Œ Destination ê°ì²Žì í ë¹íë©Ž
ëë€.
ë€ì ìœëë ë ê°ì ìì íëì íì íëì í íœì ì ìíê³ ìë€. ê° ììì ìŽëŠì
JNDI ë€ìì€íìŽì€ ëŽì ìì±ë 목ì ì§ ììì ëìëë€.
@Resource (lookup = âjms/Queueâ)
private static Queue queue;
@Resource (lookup = âjms/Topicâ)
private static Topic topic;
ê³µíµ ìží°íìŽì€ë¥Œ ìŽì©íë©Ž 컀ë¥ì
í©í 늬ì 목ì ì§ë¥Œ ìê±°ë ë§ì¶ ìë ìë€. ìŽë
ConnectionFactory ìží°íìŽì€ë¥Œ ì¬ì©íë ëì ì QueueConnectionFactory ììì
Topic 곌 ê°ìŽ ì¬ì©í ìë ìê³ , TopicConnectionFactory ììì Queue ì ê°ìŽ ì¬ì©í
ì ìë€ë ë§ìŽë€. ìŽí늬ìŒìŽì
ì ëì ë°©ìì ìŽë€ 목ì ì§ë¥Œ ì¬ì©íëì ë°ëŒ ë¬ëŒì§ ë¿
ìŽë€ ì¢
ë¥ì 컀ë¥ì
í©í 늬륌 ìŽì©íëì ê²°ì ëì§ ìëë€.
JMS 컀ë¥ì
(JMS Connections)
컀ë¥ì
ì JMS íë¡ë°ìŽëì ê°ìì ì°ê²°ì 캡ìííë€. ì륌 ë€ìŽ íëì 컀ë¥ì
ì
íŽëŒìŽìžížì íë¡ë°ìŽë ìë¹ì€ ë°ëª¬ ê°ì ìŽë € ìë TCP/IP ììŒ ì 볎륌 ííí ì ìë€.
ë¬Œë¡ íëì 컀ë¥ì
ì íë í¹ì ì¬ë¬ ê°ì ìžì
ì ìì±íêž° ìíŽ ì¬ì©í ì ìë€.
ì°žê³ â JavaEE ìŽí늬ìŒìŽì
ëŽìì ëšìŒ 컀ë¥ì
ìŒë¡ë¶í° ì¬ë¬ ê°ì ìžì
ì ìì±íë ë¥ë ¥ì ìŽí늬ìŒìŽì
íŽëŒìŽìžížììë§ ì¬ì©í ì ìë€. ì¹ìŽë ìí°íëŒìŽìŠ ë¹ ì»Ží¬ëíž ëŽìì íëì 컀ë¥ì
ì ì€ì§ íëì ìžì
ë§ì
ìì±í ì ìë€.
컀ë¥ì
ë€ì Connection ìží°íìŽì€ë¥Œ 구ííë€. 컀ë¥ì
í©í 늬 ê°ì²Žë¥Œ ê°ì§ê³ ìë€ë©Ž
ë€ì곌 ê°ìŽ 컀ë¥ì
ì ìì±íë ë° ì¬ì©í ì ìë€.
Connection connection = connectionFactory.createConnection ();
ìŽí늬ìŒìŽì
ìŽ ì¢
ë£ëêž° ì ì ìì±í 컀ë¥ì
ì ë°ëì ë«ì죌ìŽìŒ íë€. 컀ë¥ì
ì ë«ë ë°
ì€íšíë©Ž JMS íë¡ë°ìŽëì ìí ìì íŽì ê° ì€íší ì ìë€. 컀ë¥ì
ì ë«ìŒë©Ž ê·žê²ìŽ
ìŽìŽëì ìžì
ë¿ë§ ìëëŒ ë©ìì§ì ìì°ìì ìë¹ìë ë«ê² ëë€.
- 11. - 11 -
connection.close ();
ìŽí늬ìŒìŽì
ìŽ ë©ìì§ë¥Œ ìë¹í ì ìêž° ì ì ë°ëì 컀ë¥ì
ì start ë©ìë륌 ížì¶íŽìŒ
íë€: ììží ëŽì©ì [JMS ë©ìì§ ìë¹] ì¥ì ì°žê³ íëŒ. ë§ìœ 컀ë¥ì
ì ë«ì§ ìê³ ë©ìì§ì
ì ë¬ì ì€ì§íê³ ì¶ë€ë©Ž stop ë©ìë륌 ížì¶íë©Ž ëë€.
JMS ìžì
(JMS Sessions)
ìžì
ì ë©ìì§ë¥Œ ìì°íê³ ìë¹íêž° ìí ëšìŒ ì€ë ë 컚í
ì€íž(single-threaded
context)ìŽë€. ìžì
ì ë€ì ê°ì²Žë€ì ìì±í ë ì¬ì©í ì ìë€.
ï¬ ë©ìì§ ìì°ì(Message Producer)
ï¬ ë©ìì§ ìë¹ì(Message Consumer)
ï¬ ë©ìì§(Message)
ï¬ í íìêž°(Queue Browser)
ï¬ ìì í/í íœ([ìì 목ì ì§ ìì±íêž°]ì¥ ì°žì¡°)
ìžì
ì ë©ìì§ ëŠ¬ì€ëì ì€íì ì§ë ¬ííë€: ìŽì ëí ììží ëŽì©ì [JMS ë©ìì§ ëŠ¬ì€ë]
ì¥ì ì°žì¡°íëŒ.
ìžì
ì ížëìì
컚í
ì€ížë¥Œ ì ê³µíëë°, ìŽë¥Œ ìŽì©íë©Ž ìŒë šì ë©ìì§ ì ì¡ê³Œ ìì
ìì
ë€ì íëì ììíë ìì
ìŒë¡ ì²ëŠ¬íëë¡ í ì ìë€. ìŽì ëí ììží ëŽì©ì [JMS
API ë¡ì»¬ ížëìì
ìŽì©íêž°] ì¥ì ì°žì¡°íëŒ.
ìžì
ì Session ìží°íìŽì€ë¥Œ 구ííë€. 컀ë¥ì
ê°ì²Žë¥Œ ìì±í ë€ ê·žê²ì ìŽì©íì¬ ìžì
ê°ì²Žë¥Œ ìì±í ì ìë€.
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
첫 ë²ì§ž ì
ë ¥ê°ì ížëìì
ì²ëŠ¬ë¥Œ í ê²ìžì§ ì¬ë¶ë¥Œ ê²°ì íë€. ë ë²ì§žë ë©ìì§ê°
ì±ê³µì ìŒë¡ ì ë¬ëìì ë ìžì
ìŽ ë©ìì§ë¥Œ ìëì ìŒë¡ íìží ê²ìžì§ë¥Œ ê²°ì íë€. (ìŽì
ëí ììží ëŽì©ì [ë©ìì§ íìž ì ìŽíêž°] ì¥ì ì°žì¡°íëŒ.)
ížëìì
ì²ëŠ¬ê° ëë ìžì
ì ìì±íë €ë©Ž ë€ì ìœë륌 ìŽì©íë©Ž ëë€.
Session session = connection.createSession(true, 0);
ì¬êž°ì 첫 ë²ì§ž ì
ë ¥ê°ì ìŽ ìžì
ìŽ ížëìì
ì²ëŠ¬ê° ë ê²ìì ì믞íë€. ë ë²ì§žë
ížëìì
ì²ëŠ¬ë ìžì
ì ìíŽ ë©ìì§ íìž êž°ë¥ì ê·ì íì§ ìëë€ë ê²ì ì믞íë€.
ížëìì
ì ëí ë ììží ì 볎륌 ìê³ ì¶ìŒë©Ž, [JMS API ë¡ì»¬ ížëìì
ìŽì©íêž°] ì¥ì
ì°žì¡°íëŒ. JavaEE ìŽí늬ìŒìŽì
ëŽìì JMS ížëìì
ìŽ ëìíë ë°©ë²ì ëí ììží
ì 볎ë [JavaEE ìŽí늬ìŒìŽì
ëŽìì JMS API ì¬ì©íêž°] ì¥ì ì°žì¡°íëŒ.
- 12. - 12 -
JMS ë©ìì§ ìì°ì(JMS Message Producer)
ë©ìì§ ìì°ìë ìžì
ì ìíŽ ìì±ë, ë©ìì§ë¥Œ 목ì ì§ì ì ì¡íêž° ìíŽ ì¬ì©ëë ê°ì²ŽìŽë€.
ìŽ ê°ì²Žë MessageProducer ìží°íìŽì€ë¥Œ 구ííë€.
ìŽë€ 목ì ì§ë¥Œ ìí MessageProducer ê°ì²Žë¥Œ ìì±íêž° ìíŽì Session ê°ì²Žë¥Œ ìŽì©íë€.
ìë ìœëë Destination ê°ì²Žë Queue ê°ì²Žë Topic ê°ì²Žë¥Œ ìí ìì°ì륌 ë§ëë ë°©ë²ì
볎ì¬ì£Œê³ ìë€.
MessageProducer producer = session.createProducer (dest);
MessageProducer producer = session.createProducer (queue);
MessageProducer producer = session.createProducer (topic);
createProducer ë©ìëì ì
ë ¥ ê°ìŒë¡ null ì ì
ë ¥íì¬ ë¯žíìž ìì°ì(unidentified
producer)륌 ë§ë€ ìë ìë€. 믞íìž ìì°ì륌 ì¬ì©íê² ëë©Ž ë©ìì§ë¥Œ ì ì¡í ëê¹ì§
목ì ì§ë¥Œ ì ìíì§ ììë ëë€.
ë©ìì§ ìì°ì륌 ìì±í ë€ì, send ë©ìë륌 ìŽì©íì¬ ë©ìì§ë¥Œ ì ì¡í ì ìë€:
producer.send (message);
ë©ìì§ë¥Œ ì ì¡íêž° ìíŽ ë©ìì§ë¥Œ 뚌ì ìì±íŽìŒ íë€: ìŽì ëíŽìë [JMS Message]ì¥ì
ì°žê³ íëŒ.
ë§ìœ 믞íìž ìì°ì륌 ìì±íìë€ë©Ž, ë€ì곌 ê°ìŽ ì€ë³µ ì ì(overloaded)ë send ë©ìë륌
ìŽì©íì¬ ì²« ë²ì§ž ì
ë ¥ ê°ìŒë¡ 목ì ì§ë¥Œ ì§ì í ì ìë€.
MessageProducer anon_prod = session.createProducer (null);
anon_prod.send (dest, message);
JMS ë©ìì§ ìë¹ì(JMS Message Consumer)
ë©ìì§ ìë¹ìë ìžì
ì ìíŽ ìì±ë ê°ì²Žë¡ 목ì ì§ë¡ë¶í° ì ë¬ë ë©ìì§ë¥Œ ìì íë ë°ì
ì¬ì©ëë€. ìŽ ê°ì²Žë MessageConsumer ìží°íìŽì€ë¥Œ 구ííë€.
ë©ìì§ ìë¹ìë JMS íŽëŒìŽìžížê° JMS íë¡ë°ìŽëì ìŽë€ 목ì ì§ì êŽì¬ìŽ ììì ë±ë¡í
ì ìëë¡ íë€. JMS íë¡ë°ìŽëë 목ì ì§ë¡ë¶í° íŽë¹ 목ì ì§ì ë±ë¡ë ìë¹ìê¹ì§
ë©ìì§ê° ì ë¬ëë 몚ë 곌ì ì êŽëŠ¬íë€.
ì륌 ë€ìŽ, ìŽë€ Destination ìŽë Queue ë Topic ê°ì²Žë¥Œ ìí MessageConsumer ê°ì²Žë
Session ê°ì²Žë¥Œ ìŽì©íì¬ ë§ë€ ì ìë€.
MessageConsumer consumer = session.createConsumer (dest);
MessageConsumer consumer = session.createConsumer (queue);
MessageConsumer consumer = session.createConsumer (topic);
- 13. - 13 -
Session.createDurableSubscriber ë©ìë륌 ìŽì©íë©Ž ì§ìí í íœ êµ¬ë
ì(durable topic
subscriber)륌 ìì±í ì ìë€. ìŽ ë©ìëë 목ì ì§ë¡ í íœì ìŽì©í ëìë§ ì íšíë€.
ììží ëŽì©ì [ì§ìí 구ë
ì ë§ë€êž°]륌 ì°žì¡°íëŒ.
ë©ìì§ ìë¹ìê° ìì±ëê³ ëë©Ž, ë°ë¡ íì±í(active)ëìŽ ë©ìì§ë¥Œ ìì í ì ìê² ëë€.
MessageConsumer ì close ë©ìë륌 ìŽì©íë©Ž ìŽ ìë¹ì륌 ë¹íì±í(inactive) ìíë¡
ë³ê²œí ì ìë€. ë©ìì§ì ì ë¬ì ìì±ë 컀ë¥ì
ì start ë©ìë륌 ížì¶íêž° ì ê¹ì§ë
ììëì§ ìëë€. (ìŽ start ë©ìë륌 ì€ííë ê²ì ììŽìë ì ëë€. JMS íë¡ê·žëšìì
ë°ìíë ê°ì¥ íí ì€ë¥ ì€ íëë 컀ë¥ì
ì ììíë ê²ì ììŽë²ë €ì ë°ìí ê²ìŽë€.)
ìŽì receive ë©ìë륌 ìŽì©íë©Ž ë©ìì§ë¥Œ ëêž°ì (synchronously)ìŒë¡ ìë¹í ì ìë€. ìŽ
ë©ìëë 컀ë¥ì
ì ììí ìŽíëŒë©Ž ìžì ë ì¬ì©í ì ìë€.
connection.start ();
Message m = consumer.receive ();
connection.start ();
Message m = consumer.receive (1000); // 1 ìŽ í íììì
ë¹ëêž°ì ìŒë¡ ì²ëŠ¬íê³ ì¶ì ëë ë©ìì§ ëŠ¬ì€ë륌 ìŽì©íë©Ž ëë€. ìŽ ëŽì©ì ë€ì ì¥ìì
ë€ë£° ê²ìŽë€.
JMS ë©ìì§ ëŠ¬ì€ë(JMS Message Listener)
ë©ìì§ ëŠ¬ì€ëë ë©ìì§ë¥Œ ìí ë¹ëêž°ì ìŽë²€íž ížë€ë¬ë¡ì ëìíë ê°ì²ŽìŽë€. ìŽ ê°ì²Žë
MessageListener ìží°íìŽì€ë¥Œ 구ííëë°, ìŽ ìží°íìŽì€ìë onMessage ëŒë ëš
íëì ë©ìëë§ í¬íšëìŽ ìë€. onMessage ë©ìë ëŽì ë©ìì§ê° ì ë¬ëìì ë
ìíëìŽìŒ íë ëìì ì ìíë©Ž ëë€.
ë©ìì§ ëŠ¬ì€ëë í¹ì MessageConsumer ê°ì²Žì setMessageListener ë©ìë륌
ížì¶íšìŒë¡ìš ë±ë¡í ì ìë€. ì륌 ë€ìŽ, MessageListener ìží°íìŽì€ë¥Œ 구íí
Listener ëŒë íŽëì€ë¥Œ ë§ë€ìŽ ëìë€ë©Ž, ë€ì곌 ê°ì ë°©ë²ì ìŽì©íì¬ ë©ìì§ ëŠ¬ì€ë륌
ë±ë¡í ì ìë€.
Listener myListener = new Listener ();
consumer.setMessageListener (myListener);
ì°žê³ â JavaEE íë«íŒ ëŽìì MessageListener ë ìŽí늬ìŒìŽì
íŽëŒìŽìžížììë§ ì¬ì©í ì ìë€. ì¹ ì»Ží¬ëížë
ìí°íëŒìŽìŠ ë¹ ëŽììë ì¬ì©í ì ìë€.
ë©ìì§ ëŠ¬ì€ë륌 ë±ë¡í í, Connection ê°ì²Žì start ë©ìë륌 ížì¶íì¬ ë©ìì§ ì ë¬ì
ììí ì ìë€. (ë§ìœ ë©ìì§ ëŠ¬ì€ë륌 ë±ë¡íêž° ì ì start ë©ìë륌 ížì¶íë©Ž ëªëª
ë©ìì§ê° ì ì€ë ìë ìë€.)
ë©ìì§ê° ì ë¬ëêž° ììë í, JMS íë¡ë°ìŽëë ë©ìì§ê° ì ë¬ë ë ë§ë€ ìëì ìŒë¡
ë©ìì§ ëŠ¬ì€ëì onMessage ë©ìë륌 ížì¶íë€. onMessage ë©ìëë Message íì
ì
- 14. - 14 -
ì
ë ¥ê° íë륌 ë°ëë°, ìŽ ë©ìë ëŽììë ìŽë€ íì
ì Message íì
ìŒë¡ë ë³í(cast)í
ì ìë€. ([ë©ìì§ ë°ë] ì¥ì ì°žì¡°íëŒ)
ë©ìì§ ëŠ¬ì€ëë í¹ì í 목ì ì§ ì íì êµíëì§ ìê³ ì¬ì©í ì ìë€. íëì 늬ì€ëë íë
í íœ ë ì€ íëë¡ë¶í° ë©ìì§ë¥Œ ìì í ì ìëë°, ìŽë ë©ìì§ ìë¹ìê° ìì±ë ë ìŽë€
ì íì 목ì ì§ë¥Œ ì€ì íëëì ìíŽ ê²°ì ëë€. íì§ë§ ìŒë°ì ìŒë¡ ë©ìì§ ëŠ¬ì€ëë í¹ì í
ë©ìì§ ì íìŽë í¬ë§·ì ë§ê² ëìíë€.
ìì±ë onMessage ë©ìëë 몚ë ììžì¬íì ì²ëŠ¬íì¬ìŒ íë€. ì ëë¡ ì²Ží¬ ììž(checked
exception)ì ë±ìŽìë ì ëë©°, RuntimeException ì ë±ë ê²ë íë¡ê·žëë° ì€ë¥ë¡
ê°ì£Œëë€.
ë©ìì§ ìë¹ì륌 ìì±íë ë° ì¬ì©ëìë ìžì
ì íšê» ë±ë¡ë 몚ë ìŽë²€íž 늬ì€ëì ì€íì
ì§ë ¬ííë€. ìŽë ìê°ìì걎 ìžì
ì ë©ìì§ ëŠ¬ì€ëë íëë§ ì€íëë€.
JavaEE íë«íŒ ëŽìì ë©ìì§ ëëŠ¬ëž ë¹ì ë©ìì§ ëŠ¬ì€ëì í¹ë³í ì íìŽë€. ìŽì ëí
ììží ëŽì©ì [ë©ìì§ ëëŠ¬ëž ë¹ì ìŽì©íì¬ ë¹ëêž°ì ìŒë¡ ë©ìì§ ìì íêž°]ì¥ì ì°žì¡°íëŒ.
JMS ë©ìì§ ì
ë í° (JMS Message Selectors)
ë§ìœ ìì ë ë©ìì§ë¥Œ íí°ë§ í íìê° ìë€ë©Ž JMS API ì ë©ìì§ ì
ë í°ë¥Œ ìŽì©íë©Ž ëë€.
ìŽê²ì ìŽì©íë©Ž ë©ìì§ ìë¹ìê° êŽì¬ìë ë©ìì§ë§ ìë¹íê² í ì ìë€. ë©ìì§ ì
ë í°ë
ìŽí늬ìŒìŽì
ìŽ ìëëŒ JMS íë¡ë°ìŽëì ë©ìì§ íí° ìì
ì í ë¹íë€. ë©ìì§ ì
ë í°ë¥Œ
ì¬ì©íë ìŽí늬ìŒìŽì
ì ëí ìë [JMS API ì ìžì
ë¹ì ì¬ì©íë ìŽí늬ìŒìŽì
]륌
ì°žê³ íëŒ.
ë©ìì§ ì
ë í°ë ìŽë€ ííë²ì í¬íšíê³ ìë String ê°ì²ŽìŽë€. ìŽ ííë²ì SQL92 조걎
íí 구묞(SQL92 conditional expression syntax)ì ë¶ë¶ì§í©ì êž°ë°ìŒë¡ ë§ë€ìŽì¡ë€.
ìë ììì ì¬ì©ë ë©ìì§ ì
ë í°ë NewsType ì ê°ìŽ Sports ê±°ë Opinion ìž
ë©ìì§ë€ì ì ííê² ëë€.
NewsType = âSportsâ OR NewsType = âOpinionâ
createConsumer ë©ìëì createDurableSubscriber ë©ìëë ë©ìì§ ìë¹ì륌 ìì±í ë
ë©ìì§ ì
ë í°ë¥Œ ì€ì í ì ìê² ëìŽ ìë€.
ë©ìì§ ì
ë í°ê° ì€ì ëê³ ëë©Ž, ë©ìì§ ìë¹ìë í€ë í¹ì ìì± ê°ìŽ íŽë¹ ë©ìì§ ì
ë í°ì
ë§ë ë©ìì§ë§ ìì íê² ëë€. ([ë©ìì§ í€ë] ì¥ê³Œ [ë©ìì§ ìì±] ì¥ì íìžíëŒ.) ë©ìì§
ì
ë í°ë ë©ìì§ ë°ëì ëŽì©ì êž°ë°í íí°ë§ì í ìë ìë€.
JMS ë©ìì§ (JMS Message)
- 15. - 15 -
JMS ìŽí늬ìŒìŽì
ì ê¶ê·¹ì ìž ëª©ì ì ë€ë¥ž ìŽí늬ìŒìŽì
ìì ì¬ì©ë ì ìë ë©ìì§ë¥Œ
ìì°íê³ ìë¹íë ê²ìŽë€. JMS ë©ìì§ë ëšìíë©Žìë ì죌 ì ì°í Ʞ볞 íììŒë¡
ë§ë€ìŽì ž ìëë°, ìŽêž°ì¢
íë«íŒì ì€ì¹ë ë¹ JMS ìŽí늬ìŒìŽì
ìì ì¬ì©ëë ë©ìì§
íìë ìì±í ì ìë€.
JMS ë©ìì§ë ìž ë¶ë¶ìŒë¡ ëëìŽì§ë€; í€ë(header), ìì±(properties), 귞늬ê³
ë°ë(body)ìŽë€. í€ëë§ìŽ íìì ìŒë¡ ì¡Žì¬íŽìŒ íë€. ìŽ ì¥ì ëëšžì§ ë¶ë¶ë€ì ìŽ ìž ê°ì§
ë¶ë¶ë€ì ëíŽ ë€ë£° ê²ìŽë€.
ë©ìì§ í€ë, ìì±, ë°ëì ëí ììží ëŽì©ì Message ìží°íìŽì€ì API 묞ì륌 íìžíêžž
ë°ëë€.
ë©ìì§ í€ë (Message Headers)
JMS ë©ìì§ í€ëìë íŽëŒìŽìžížì íë¡ë°ìŽëê° ë©ìì§ë¥Œ íìžíê³ ì ë¬íë ë°ì
ì¬ì©íë 믞늬 ì ìë íëë€ê³Œ ê·žì ëí ê°ë€ìŽ ì
ë ¥ëë€. í 47-1 ì JMS ë©ìì§ í€ëì
íëë€ê³Œ ê·žì ëí ê°ìŽ ìŽëìì ì€ì ëëì§ì ëí ëŽì©ì 볎ì¬ì€ë€. ì륌 ë€ìŽ, 몚ë
ë©ìì§ë ì ìŒí ìë³ì(unique identifier)륌 ê°ê³ ìëë°, ìŽë í€ë íëì
JMSMessageID ì ê°ìŒë¡ ì
ë ¥ëë€. ë ë€ë¥ž íëìž JMSDestination ì ê°ì ë©ìì§ê°
ì ë¬ë í í¹ì í íœì ëí ì 볎륌 ëíëžë€. ë€ë¥Œ íëë€ì ìê° ì 볎ë ì°ì ìì ë±ì
ëíëžë€.
ê° í€ë íëë€ì setter ì getter ë©ìëë€ê³Œ ì°êŽëìŽ ìëë°, ìŽì ëí ëŽì©ë€ì
Message ìží°íìŽì€ì 묞ìì êž°ì ëìŽ ìë€. ëªëª í€ë íëë€ì íŽëŒìŽìžížì ìíŽ
ì€ì ëëë¡ ëìŽ ìì§ë§, ë§ì ê²œì° send ë publish ë©ìëê° ížì¶ë ë ìëìŒë¡ ì€ì ëë©°,
ìŽë ê² ì€ì ëë ê°ë€ì íŽëŒìŽìžížê° ì€ì í ê°ì ë®ìŽ ì°ê² ëë€.
í€ë íë ì€ì 죌첎
JMSDestination send í¹ì publish ë©ìë
JMSDeliveryMode send í¹ì publish ë©ìë
JMSExpiration send í¹ì publish ë©ìë
JMSPriority send í¹ì publish ë©ìë
JMSMessageID send í¹ì publish ë©ìë
JMSTimestamp send í¹ì publish ë©ìë
JMSCorrelationID íŽëŒìŽìžíž
JMSReplyTo íŽëŒìŽìžíž
JMSType íŽëŒìŽìžíž
JMSRedelivered JMS íë¡ë°ìŽë
í 47-1 JMS ë©ìì§ í€ë íë ê°ë€ì ì€ì íë ê³³
- 16. - 16 -
ë©ìì§ ìì± (Message Properties)
í€ëì ì
ë ¥ë íëì ê° ìžì ì¶ê°ì ìž ì ë³Žê° íìíë€ë©Ž ìì± ê°ë€ì ìŽì©í ì ìë€.
ë€ë¥ž ë©ìì§ ìì€í
곌ì ížíì±ì ìíŽ ìì±ê°ë€ì ì¶ê°í ìë ìê³ , í¹ì ë©ìì§ ì
ë í°ë¥Œ
ìíŽ ìì± ê°ì ì¶ê°í ìë ìë€. ([JMS ë©ìì§ ì
ë í°] ì¥ì ì°žê³ íëŒ.) ë©ìì§
ì
ë í°ìì ì¬ì©ë ìì±ê°ì ì€ì íë ë°©ë²ì ëíŽìë [JMS API ì ìžì
ë¹ì ì¬ì©íë
ìŽí늬ìŒìŽì
]ì¥ì ì°žê³ íëŒ.
JMS API ë íë¡ë°ìŽëê° ì§ìí ì ìë ëªëª ì¬ì ì ì ìë ìì± ìŽëŠë€ì ì ê³µíê³ ìë€.
ì¬ì ì ì ìì±ê°ìŽë ì¬ì©ì ì ì ìì±ê°ìŽë 몚ë íì í목ì ìëë€.
ë©ìì§ ë°ë (Message Bodies)
JMS API ë ë€ì¯ ê°ì§ì ë©ìì§ ë°ë íì- í¹ì ë©ìì§ ì íì ì ìíŽ ëê³ ìëë°,
ìŽê²ë€ì ìŽì©íë©Ž ë€ìí íìì ë°ìŽí°ë¥Œ ì¡/ìì í ì ììŒë©°, ìŽë¯ž ì¡Žì¬íê³ ìë ë©ìì§
íì곌ë ížíë ì ìë€. í 47-2 ìì ë©ìì§ ì íë€ì íìží ì ìë€.
ë©ìì§ ì í ë°ë ëŽì©
TextMessage java.lang.String ê°ì²Ž (ì륌 ë€ìŽ XML íìŒì ëŽì©)
MapMessage
ìŽëŠ(name)-ê°(value) ììŒë¡ ìŽë£šìŽì§ ì 볎ë€. ìŽëŠì String ê°ì²ŽìŽê³ ê°ì Java
íë¡ê·žëë° ìžìŽì ìì ìë£íìŽë€. Enumerator 륌 ìŽì©íì¬ ìì°šì ìŒë¡ ì ê·Œí ìë
ìê³ ìŽëŠì 귌거íì¬ ë¬Žììë¡ ì ê·Œí ìë ìë€. ì
ë ¥ë ì 볎ì ììë ì íŽì ž ìì§
ìë€.
BytesMessage
íŽìëì§ ìì ë°ìŽížë€ì ì€ížëŠŒ. ìŽ ë©ìì§ ì íì ë§ ê·žëë¡ êž°ì¡Žì ë©ìì§ íìì
ë§ì¶êž° ìíŽ ë°ë륌 ìžìœë© íë€.
StreamMessage Java íë¡ê·žëë° ìžìŽì ìì ìë£íì ì€ížëŠŒ. ìì°šì ìŒë¡ ì
ë ¥ëê³ ìì°šì ìŒë¡ ìœíë€.
ObjectMessage Java íë¡ê·žëë° ìžìŽìì ì¬ì©íë Serializable ê°ì²Ž.
Message
ìì. í€ë íëë€ê³Œ ìì±ë€ë¡ë§ ìŽë£šìŽì§. ë©ìì§ ë°ëê° íìì¹ ìì 겜ì°ì ì ì©íê²
ì¬ì©í ì ìë€.
í 47-1 JMS ë©ìì§ ì íë€
JMS API ìë ê° ì íì ë©ìì§ë¥Œ ìì±íê³ ê·ž ëŽì©ì ì±ìž ì ìë ë©ìëë€ì í¬íšëìŽ
ìë€. ì륌 ë€ìŽ, TextMessage 륌 ìì±íì¬ ì ì¡íë €ë©Ž, ë€ì곌 ê°ì ìœë륌 ìŽì©íì¬ìŒ
íë€.
TextMessage message = session.createTextMessage ();
message.setText (msg_text); // msg_text ë String ê°ì²ŽìŽë€.
producer.send (message);
ë©ìì§ ìë¹ê° ìë£ëë©Ž, ë©ìì§ë ìíì(generic) Message ê°ì²Žë¡ì ëì°©íê² ëëë°,
ì ì í ë©ìì§ ì íìŒë¡ ìºì€í
íì¬ ì¬ì©íŽìŒ íë€. ë©ìì§ ì»ší
ìž ë¥Œ ì¶ì¶íêž° ìíŽ í ê°
í¹ì ëª ê°ì getter ë©ìë륌 ìŽì©í ì ìë€. ë€ì ìœëë getText ë©ìë륌 ì¬ì©íë ì
ìŽë€.
- 17. - 17 -
Message m = consumer.receive();
if (m instanceof TextMessage) {
TextMessage message = (TextMessage) m;
System.out.println("Reading message: " + message.getText());
} else {
// Handle error
}
JMS QueueBrowser
íë¡ ì ì¡ë ë©ìì§ë€ì íŽë¹ íì ëí ë©ìì§ ìë¹ìê° ê·ž ë©ìì§ë€ì ìë¹íêž° ì ê¹ì§ í
ìì ëšììê² ëë€. JMS API ë í ëŽì ìë ë©ìì§ë€ì íìíê³ ê° ë©ìì§ë€ì í€ë
ê°ë€ì íìží ì ìë QueueBrowser ê°ì²Žë¥Œ ì ê³µíë€. QueueBrowser ê°ì²Žë
Session.createBrowser ë©ìë륌 ìŽì©íì¬ ìì±í ì ìë€. ì륌 ë€ë©Ž ë€ì곌 ê°ë€.
QueueBrowser browser = session.createBrowser (queue);
QueueBrowser 륌 ì¬ì©íë ìì ë [Queue ëŽì ë©ìì§ë¥Œ íìíë ê°ëší ìì ] ì¥ìì
ì°Ÿì볌 ì ìë€.
createBrowser ë©ìëë QueueBrowser 륌 ìì±í ë ë ë²ì§ž ì
ë ¥ê°ìŒë¡ ë©ìì§
ì
ë í°ë¥Œ ì§ì í ì ìë€. ë©ìì§ ì
ë í°ì ëí ììží ëŽì©ì [JMS ë©ìì§ ì
ë í°] ì¥ì
ì°žê³ íëŒ.
JMS API ë í íœì íìíêž° ìí ë©ì»€ëìŠì ì ê³µíì§ ìëë€. í íœì ë±ë¡ëë
ë©ìì§ë€ì ë³Žíµ ë±ë¡ëìë§ì ì¬ëŒì§ë€. ë©ìì§ë¥Œ ìë¹í ë©ìì§ ìë¹ìë€ìŽ ë±ë¡ëìŽ ìì§
ìë€ë©Ž, JMS íë¡ë°ìŽëê° ììì ë©ìì§ë€ì ì ê±°íë€. ì§ì 구ë
ë°©ìì ìŽì©íë©Ž ë©ìì§
ìë¹ì ììŽë í íœ ëŽì ë©ìì§ê° ëšì ìì ì ìì§ë§, ì¬ì í ë©ìì§ë¥Œ íìží ì ìë
ë°©ë²ì ì¡Žì¬íì§ ìëë€.
JMS ììž ì²ëŠ¬
JMS API ë©ìëë€ì ìíŽ ëì žì§ë ììžì ìµìì íŽëì€ë JMSException ìŽë€.
JMSException 륌 catch íë©Ž JMS API ì êŽë šë 몚ë ììž ìí©ì ì²ëŠ¬í ì ìë€.
API 묞ìì êž°ì ëìŽ ìë JMSException íì íŽëì€ë€ì ë€ì곌 ê°ë€.
ï¬ IllegalStateException
ï¬ InvalidClientIDException
ï¬ InvalidDestinationException
ï¬ InvalidSelectorException
ï¬ JMSSecurityException
ï¬ MessageEOFException
ï¬ MessageFormatException
ï¬ MessageNotReadableException
- 18. - 18 -
ï¬ MessageNotWriteableException
ï¬ ResourceAllocationException
ï¬ TransactionInProgressException
ï¬ TransactionRolledBackException
íí ëŠ¬ìŒ ëŽì 몚ë ìì ë€ì, ê·žë ê² íë ê²ìŽ í©ë¹í 겜ì°, JMSException ì catch íê³
ì²ëŠ¬íê³ ìë€.
ê²¬ê³ í JMS ìŽí늬ìŒìŽì
ìì±íêž°
ìŽ ì¥ììë ìŽí늬ìŒìŽì
ì ìì±íë ë°ì íìí ìŒì ìì€ì ìì ì±ê³Œ ì±ë¥ì ë¬ì±íêž°
ìíŽ JMS API 륌 ì¬ì©íë ë°©ë²ì ëíŽ ë€ë£° ê²ìŽë€. ë§ì ì¬ëë€ìŽ ëš íë² íì€íê²
ì ë¬ëìŽìŒ íë ë©ìì§ë€ìŽ ì ì€ëê±°ë ì€ë³µ ì ì¡ëë 묞ì ë묞ì JMS ìŽí늬ìŒìŽì
ì
구ííì¬ ì¬ì©íë€. JMS API ê° ìŽë¥Œ ìí êž°ë¥ë€ì ì ê³µíêž° ë묞ìŽë€.
ë©ìì§ë¥Œ ìì±íë ë°ì ê°ì¥ ì 뢰í ì ìë ë°©ë²ì ë©ìì§ë¥Œ ížëìì
ëŽìì
ì ì§ëëë¡(PERSISTENT) íë©° ì ì¡íë ê²ìŽë€. JMS ë©ìì§ë€ì Ʞ볞ì ìŒë¡
PERSISTENT ìŽë€. ížëìì
ìŽëŒë ê²ì ë©ìì§ë¥Œ ì ì¡íê³ ìì íë ê²ê³Œ ê°ìŽ ìŒë šì
ìëì 묶ìŽì íëì ìì
ëšìë¡ ë§ëë ê²ìžë°, ê·žë ê² íšìŒë¡ìš 몚ë ìì
ë€ìŽ
ì±ê³µíê±°ë ì€íšíëë¡ íë ê²ìŽë€. ìŽì ëí ììží ëŽì©ì [ë©ìì§ ì§ìì± ì§ì íêž°]
ì¥ê³Œ [JMS API ì ë¡ì»¬ ížëìì
ìŽì©íêž°] ì¥ì ì°žê³ íëŒ.
ë©ìì§ë¥Œ ìë¹íë ë°©ë² ì€ ê°ì¥ ì 뢰í ì ìë ë°©ë²ì íë í íœì ëí ì§ì 구ë
ì
ížëìì
ëŽìì ì²ëŠ¬íë ê²ìŽë€. ìŽì ëí ììží ëŽì©ì [ìì 목ì ì§ ë§ë€êž°] ì¥ê³Œ
[ì§ì 구ë
ë°©ë²] ì¥, ê·žëŠ¬ê³ [JMS API ì ë¡ì»¬ ížëìì
ìŽì©íêž°] ì¥ì ì°žê³ íëŒ.
ì¢ ë€ë¥ž 겜ì°ìë ë®ì ìì€ì ì 뢰ë륌 ìŽì©íì¬ ì€ë²í€ë륌 ì€ìŽê³ ì±ë¥ì í¥ììí¬ ìë
ìë€. ë©ìì§ë¥Œ ì¬ë¬ ì°ì ììë¡ ëëìŽ ë³ŽëŒ ì ìê³ ([ë©ìì§ ì°ì ìì ì íêž°] ì°žì¡°), ë
ìŒì ìê°ìŽ ì§ëë©Ž ë©ìì§ê° ë§ë£ëëë¡ í ìë ìë€.([ë©ìì§ê° ë§ë£ëëë¡ ì€ì íêž°]
ì°žì¡°)
JMS API ë ë€ìí ì¢
ë¥ì ìì€ì ì 뢰ë륌 ì»ì ì ìëë¡ ì¬ë¬ ê°ì§ ë°©ë²ë€ì ì ê³µíë€.
ìŽ ì¥ì JMS API 륌 ìŽì©íì¬ ì 뢰ë ëì ìŽí늬ìŒìŽì
ì ê°ë°íêž° ìí Ʞ볞ì ìž ë°©ë²ê³Œ
ì¢ ë ì§ë³Žë ë°©ë²ì ë€ë£šë ë ì ë¡ ëëìŽì ž ìë€.
ìŽì ìê°ë ëŽì©ì JMS íŽëŒìŽìžížì ì ì©ë ì ìë í¹ì§ë€ì ë€ë£šê³ ìë€. ìŽë€ ì€
ëªëªì JavaEE ìŽí늬ìŒìŽì
ììë ì¢ ë€ë¥Žê² ëìí ìë ìë€. ê·ž ì°šìŽì ì ìŽ ì¥ê³Œ
ëë¶ìŽ [JavaEE ìŽí늬ìŒìŽì
ìì JMS API ì¬ì©íêž°] ì¥ìì ì¬ë ìê² ë€ë£° ê²ìŽë€.
ìì ì±ìë ë©ìì§ì ìí Ʞ볞 ë©ì»€ëìŠ
ë©ìì§ ì ë¬ì íë ë° ìì ì±ì 볎ì¥íêž° ìí Ʞ볞ì ìž ë©ì»€ëìŠì ë€ì곌 ê°ë€.
- 19. - 19 -
ï¬ ë©ìì§ íìž ì ìŽíêž°: ë©ìì§ íìžì ë€ìí ìì€ìŒë¡ ì ìŽí ì ìë€.
ï¬ ë©ìì§ Persistence ì§ì íêž°: ë©ìì§ê° (íìŒìŽë DB ëŽì) ì§ìëëë¡ ì§ì í ì
ìëë°, ìŽ ë§ì íë¡ë°ìŽëì 묞ì ê° ë°ìíëëŒë ë©ìì§ê° ì ì€ëì§ ììì
ì믞íë€.
ï¬ ë©ìì§ ì°ì ìì ì€ì íêž°: ë€ìí ìì€ì ë©ìì§ ì°ì ìì륌 ì§ì í ì ìëë°,
결곌ì ìŒë¡ ë©ìì§ê° ì ë¬ëë ììì ìí¥ì ì€ ì ìë€.
ï¬ ë©ìì§ ë§ë£ íì©íêž°: ë©ìì§ì ë§ë£ ìê°ì ì§ì í ì ììŽ ë묎 ì€ëë ë©ìì§ë
ì ë¬ëì§ ìëë¡ í ì ìë€.
ï¬ ìì 목ì ì§ ìì±íêž°: 컀ë¥ì
ìŽ ìì±ëìŽ ì¬ì©ëê³ ìë ìê° ëììë§ ì ì§ëë
ìì ì ì¥ì륌 ìì±í ì ìë€.
ë©ìì§ íìž ì ìŽíêž°(Controlling Message Acknowledgement)
íìžëêž° ì ê¹ì§ë ë©ìì§ì ëí ìë¹ê° ì±ê³µì ìŽìë€ê³ ê°ì£Œëì§ ìëë€. ì±ê³µì ìž
ë©ìì§ ìë¹ë ë³Žíµ ìž ëšê³ë¥Œ ê±°ì³ ìŒìŽëë€.
1. íŽëŒìŽìžížê° ë©ìì§ë¥Œ ìì íë€.
2. íŽëŒìŽìžížê° ë©ìì§ë¥Œ ì²ëŠ¬íë€.
3. ë©ìì§ê° íìžëìë€. íìž ì²ëŠ¬ë ìžì
ì ì§ì ë ë©ìì§ íìž ëªšëì ë°ëŒ JMS
íë¡ë°ìŽëë íŽëŒìŽìžíž ë ì€ íëì ìíŽ ììëë€.
ížëìì
ëŽìì ì²ëŠ¬ëê³ ìë ìžì
([JMS API ë¡ì»¬ ížëìì
ì¬ì©íêž°] ì¥ ì°žì¡°)ììë,
ížëìì
ìŽ ì»€ë° ì²ëŠ¬ëë©Ž ìëì ìŒë¡ íìž ì²ëŠ¬ê° ìŽë£šìŽì§ë€. ížëìì
ìŽ ë¡€ë°± ì²ëŠ¬ëë©Ž
몚ë ë©ìì§ë€ì ì¬ì ì¡ëë€.
ížëìì
ëŽìì ì²ëŠ¬ëì§ ìë ìžì
ì createSession ë©ìëì ë ë²ì§ž ì
ë ¥ê°ì ì§ì ë
ê°ì ë°ëŒ ë©ìì§ íìž ì²ëŠ¬ê° ìŽë£šìŽì§ë€. ì¬êž°ìë ìž ê°ì§ ì
ë ¥ê°ìŽ ì¬ì©ë ì ìë€.
ï¬ Session.AUTO_ACKNOWLEDGE: íŽëŒìŽìžížì receive ë©ìëê° ì±ê³µì ìŒë¡
ëŠ¬íŽ ëìê±°ë, ë©ìì§ë¥Œ ì²ëŠ¬íêž° ìíŽ ížì¶ë ë©ìì§ ëŠ¬ì€ëê° ì±ê³µì ìŒë¡ 늬íŽ
ëë©Ž ìëì ìŒë¡ ë©ìì§ íìžëë€.
AUTO_ACKNOWLEDGE ìžì
ëŽìì ëêž°í ìì (synchronous receive)ì
ìŽì©íë©Ž ììì ìžêží ë©ìì§ ìë¹ê° ìž ëšê³ë¡ ìŽë£šìŽì§ë€ë ê·ì¹ê³Œë ë€ë¥Žê²
ëìíë€. ìŽ ê²œì°ìë, ë©ìì§ ì£Œì 곌 íìžìŽ í ëšê³ìì ê°ìŽ ë°ìíëë°, ê·ž ë€ì
ë©ìì§ì ëí ì²ëŠ¬ê° ìŽë£šìŽì§ë€.
ï¬ Session.CLIENT_ACKNOWLEDGE: íŽëŒìŽìžížê° ë©ìì§ì acknowledge
ë©ìë륌 ì§ì ížì¶íšìŒë¡ìš íìž ì²ëŠ¬ê° ìŽë£šìŽì§ë€. ìŽ ëªšëììë íìžìŽ ìžì
ë 벚ìì ìŒìŽëë€. ìë¹ë ë©ìì§ì ëíŽ íìž ì²ëŠ¬ë¥Œ íê² ëë©Ž ìëì ìŒë¡ ê·ž
ìžì
ìì ìë¹ë 몚ë ë©ìì§ë€ì ìì ì ëíŽ íìž ì²ëŠ¬ê° ëë€. ì륌 ë€ìŽ, ë©ìì§
ìë¹ìê° ìŽ ê°ì ë©ìì§ë¥Œ ìë¹íë ì€ ë€ì¯ ë²ì§žìì íìž ì²ëŠ¬ë¥Œ ìííë©Ž ìŽ
ê°ì 몚ë ë©ìì§ì ëíŽ íìž ì²ëŠ¬ê° ìŽë£šìŽì§ë€.
ì°žê³ â JavaEE íë«íŒìì, CLIENT_ACKNOWLEDGE ìžì
ì ìŽí늬ìŒìŽì
íŽëŒìŽìžížììë§ ì¬ì©í ì ììŒë©°,
ì¹ ì»Ží¬ëížë ìí°íëŒìŽìŠ ë¹ììë ì¬ì©í ì ìë€.
- 20. - 20 -
ï¬ Session.DUPS_OK_ACKNOWLEDGE: ìŽ ìµì
ì ìŽì©íë©Ž ìžì
ì ì ë¬ë
ë©ìì§ì ëíŽ ëì€ì íìž ì²ëŠ¬ë¥Œ íê² ëë€. ìŽê²ì ìŽì©íë©Ž JMS íë¡ë°ìŽëì
묞ì ê° ìêž°ë ê²œì° ë©ìì§ê° ì€ë³µ ë°ì¡ëë 겜ì°ê° ìëë°, ê·žë êž° ë묞ì ë°ëì
ì€ë³µ ë©ìì§ë¥Œ ì ì í ì²ëŠ¬í ì ìë íŽëŒìŽìžížììë§ ì¬ì©ëìŽìŒ íë€. (ë§ìœ
JMS íë¡ë°ìŽëê° ë©ìì§ë¥Œ ì¬ì ì¡íë€ë©Ž, JMS ë©ìì§ í€ëì JMSRedelivered
ê°ìŽ true ë¡ ì€ì ëìŽìŒ íë€.) ìŽ ìµì
ì ë©ìì§ ì€ë³µ ì ì¡ì ë§êž° ìí ìì
ì€ë²í€ë륌 ì€ìŽë ë° ëìì ì€ë€.
íë¡ë¶í° ë©ìì§ê° ìì ëìì§ë§ ìžì
ìŽ ëë ëê¹ì§ íìž ì²ëŠ¬ê° ìŽë£šìŽì§ì§ ììŒë©Ž, JMS
íë¡ë°ìŽëê° ìŽë€ì 볎ì íê³ ìë€ê° ë€ìì ìë¹ìê° íì ì ê·Œí ë ë©ìì§ë¥Œ ë€ì
ì ì¡íê² ëë€. íë¡ë°ìŽëë ì§ìí TopicSubscriber ë€ìì ì¬ì©ëë ìžì
ìŽ ì¢
ë£ë
겜ì°ìë ì²ëŠ¬ íìžëì§ ìì ë©ìì§ê° ììŒë©Ž ìì ê°ìŽ 볎ì íë€. ([ì§ì 구ë
ìì±íêž°]ì¥
ì°žì¡°) ì§ì 구ë
ìŽ ìë TopicSubscriber 륌 ìí ë©ìì§ë€ìŽ ì²ëŠ¬ê° íìžëì§ ìì ì±ë¡
ìžì
ìŽ ìë£ëê² ëë©Ž íŽë¹ ë©ìì§ë€ì ë²ë €ì§ê² ëë€.
íë ì§ìí 구ë
ë°©ìì ì¬ì©íê³ ìë 겜ì°, Session.recover ë©ìë륌 ìŽì©íì¬ ížëìì
ì²ëŠ¬ëì§ ìë ìžì
ì ì¢
ë£íê³ ì²ëŠ¬ íìžëì§ ìì ë©ìì§ë¶í° ë€ì ììíëë¡ í ì ìë€.
ì€ì ë¡ ìžì
ì ì ì¡ë ë©ìì§ë€ìŽ ìŽì ì íìžë ë©ìì§ ìŽíë¡ë ì ì¡ëì§ ìì ê²ìŒë¡
늬ì
ëë€. ê·ž íì ì ì¡ëë ë©ìì§ë ìë ì ì¡ëìë ìí©ê³Œë ì¢ ë€ë¥Œ ì ìëë°,
ë©ìì§ê° ë§ë£ëìê±°ë í¹ì ëì ì°ì ììì ë©ìì§ê° 뚌ì ì ë¬ë ìë ìêž° ë묞ìŽë€.
ì§ìíìŽ ìë TopicSubscriber ì 겜ì°ìë ìžì
ìŽ recover ë ë íìžëì§ ìì
ë©ìì§ë€ì ë²ë €ì§ ìë ìë€.
[ë©ìì§ ì²ëŠ¬ íìž ì] ì¥ìì ìžêžëë ìì íë¡ê·žëšìì ë©ìì§ ì²ëŠ¬ê° ìë£ëêž° ì
ê¹ì§ë ë©ìì§ ì²ëŠ¬ íìžì íì§ ìëë¡ íë ë ê°ì§ ë°©ë²ì íìží ì ìë€.
ë©ìì§ Persistence ì§ì íêž°(Specifying Message Persistence)
JMS API ë JMS íë¡ë°ìŽëì 묞ì ê° ë°ìíìì ê²œì° ë©ìì§ê° ë²ë €ì§ì§ ì¬ë¶ë¥Œ
ê²°ì íë ë ê°ì§ ì ì¡ ëªšë륌 ì§ìíë€. ìŽ ëªšëë€ì DeliveryMode ìží°íìŽì€ì íëë¡
ì ìëìŽ ìë€.
ï¬ PERSISTENT 몚ëë, Ʞ볞ì ìŒë¡ ìŽ ëªšëê° ì¬ì©ëëë°, JMS íë¡ë°ìŽëê°
ì ì§íê±°ë 묞ì ê° ë°ìíë 겜ì°ìë ë©ìì§ê° ì ì€ëì§ ìëë¡ ë³ëì ì²ëŠ¬ë¥Œ
íëë¡ íë€. ìŽ ëªšë륌 ìŽì©íì¬ ì ì¡ëë ë©ìì§ë€ì ì ì¡ëë 곌ì ìì ìì ì ìž
ì ì¥ ì¥ì¹(storage)ì ììŽê² ëë€.
ï¬ NON_PERSISTENT 몚ëë JMS íë¡ë°ìŽëê° ë©ìì§ë¥Œ ì ì¥íê±°ë
íë¡ë°ìŽëì 묞ì ê° ë°ìíì ë ë©ìì§ê° ì ì€ëì§ ìì ê²ì 볎ì¥í ê²ì
ì구íì§ ìëë€.
ìŽ ëªšëë€ì ë ê°ì§ ë°©ë²ìŒë¡ ì§ì ë ì ìë€.
ï¬ ë©ìì§ ìì°ìì ìíŽ ì ë¬ëë 몚ë ë©ìì§ë€ì ëìŒí ì ë¬ ëªšëê° ì§ì ëëë¡
íêž° ìíŽ MessageProducer ìží°íìŽì€ì setDeliveryMode ë©ìë륌 ìŽì©í ì
ìë€. ì륌 ë€ìŽ, ë€ì ìœëë ìì°ìì ì ë¬ ëªšë륌 NON_PERSISTENT ë¡
- 21. - 21 -
ì§ì íë€.
producer.setDeliveryMode (DeliveryMode.NON_PERSISTENT);
ï¬ í¹ì í ë©ìì§ì ëíŽ ë³ëë¡ ëªšë륌 ì§ì íêž° ìíŽ êžŽ íìì publish ë©ìë륌
ìŽì©í ìë ìë€. ë ë²ì§ž ì
ë ¥ê°ìŽ ì ë¬ ëªšëìŽë€. ì륌 ë€ìŽ, ìë send ë©ìë륌
ížì¶íë ìœëë message ê° NON_PERSISTENT 몚ëë¡ ì ë¬ëëë¡ íë€.
producer.send (message, DeliveryMode.NON_PERSISTENT, 3, 10000);
ìž ë²ì§žì ë€ ë²ì§ž ì
ë ¥ê°ë€ì ì°ì ììì ë§ë£ ìê°ìžë°, ë€ì ë ê° ì¥ìì ë€ë€ì§
ê²ìŽë€.
ì ë¬ ëªšë륌 ì§ì íì§ ììŒë©Ž Ʞ볞ì ìŒë¡ PERSISTENT 몚ëê° ì¬ì©ëë€. ì±ë¥ì ëìŽê³
ì ì¥ìì ì€ë²í€ë륌 ì€ìŽê³ ì íë€ë©Ž NON_PERSISTENT 몚ë륌 ì¬ì©íë ê²ìŽ
ë°ëì§íë€. íì§ë§ ë©ìì§ê° ì ì€ëìŽë 묎방í 겜ì°ìë§ ì¬ì©íŽìŒ í ê²ìŽë€.
ë©ìì§ ì°ì ìì ì€ì íêž°(Setting Message Priority Levels)
JMS íë¡ë°ìŽëê° êžŽêž ë©ìì§ë¥Œ 뚌ì ì ë¬íëë¡ ë©ìì§ì ì°ì ìì륌 ì§ì í ì ìë€.
ë©ìì§ ì°ì ìì륌 ì íë ë°©ë²ìë ë€ì ë ê°ì§ê° ìë€.
ï¬ MessageProducer ì setPriority ë©ìë륌 ìŽì©íì¬ ë©ìì§ ìì°ìì ìíŽ
ì ë¬ëë 몚ë ë©ìì§ê° ëìŒí ì°ì ìì륌 ê°ëë¡ í ì ìë€. ì륌 ë€ìŽ, ìë
ìœëë producer ì ì°ì ìì륌 7 ë¡ ì€ì íë€.
producer.setPriority (7);
ï¬ í¹ì ë©ìì§ì ì°ì ìì륌 ì§ì íêž° ìíŽ êžŽ send ë publish ë©ìë륌 ìŽì©í ì
ìë€. ìž ë²ì§ž ì
ë ¥ê°ìŽ ì°ì ìììŽë€. ì륌 ë€ìŽ, ìë send ë©ìë ížì¶ì
message ì ì°ì ìì륌 3 ìŒë¡ ì§ì íë€.
producer.send (message, DeliveryMode.NON_PERSISTENT, 3, 10000);
0(ê°ì¥ ë®ì)ë¶í° 9(ê°ì¥ ëì)ê¹ì§ 10 ê°ì ëšê³ë¥Œ ì§ì í ì ìë€. ì°ì ìì륌 ì§ì íì§
ìëë€ë©Ž Ʞ볞ì ìŒë¡ 4 ë¡ ì²ëŠ¬ëë€. JMS íë¡ë°ìŽëë€ì ì°ì ììê° ëì ë©ìì§ë¥Œ ë®ì
ë©ìì§ë³Žë€ 뚌ì 볎ëŽë €ê³ ìëí ê²ìŽë€. íì§ë§ ë°ëì ê·ž ì íí ììëë¡ ì ë¬ëì§ë
ìì ê²ìŽë€.
ë©ìì§ ë§ë£ íì©íêž°(Allowing Message Expiration)
Ʞ볞ì ìŒë¡ ë©ìì§ë€ì ì ëë¡ ë§ë£ëì§ ìëë€. íì§ë§, ìŒì êž°ê°ìŽ ì§ëë©Ž ìžëªš ììŽì§ë
ë©ìì§ê° ìë€ê³ íë€ë©Ž, ê·žì ëíŽ ë§ë£ ìê°ì ì§ì íê³ ì¶ì ê²ìŽë€. ìŽ ìì ë ê°ì§
ë°©ë²ìŒë¡ ì€ì í ì ìë€.
ï¬ MessageProducer ìží°íìŽì€ì setTimeToLive ë©ìë륌 ìŽì©íì¬ í¹ì ë©ìì§
ìì°ìì ìíŽ ì ë¬ëë 몚ë ë©ìì§ì ë§ë£ ìê°ì ëìŒíê² ì§ì í ì ìë€. ì륌
ë€ìŽ ìë ìœëë producer ê° ì ë¬íë 몚ë ë©ìì§ë€ì ìëª
ì
1 ë¶(=60000ms)ë¡ ì§ì í ì ìë€.
producer.setTimeToLive (60000);
- 22. - 22 -
ï¬ send í¹ì publish ë©ìë륌 ìŽì©íì¬ í¹ì ë©ìì§ì ë§ë£ ìê°ì ì§ì í ì ìë€.
ë€ ë²ì§ž ì
ë ¥ ê°ìŽ ë°ëŠ¬ ìžì»šëë¡ ì§ì ëë ë§ë£ ìê°ìŽë€. ì륌 ë€ìŽ ìë ìœëë
ë©ìì§ì ìëª
ì 10 ìŽë¡ ì ííë€.
producer.send (message, DeliveryMode.NON_PERSISTENT, 3, 10000);
timeToLive ì ê°ì 0 ìŒë¡ ì€ì íë©Ž ê·ž ë©ìì§ë ë§ë£ëì§ ìëë€.
ë©ìì§ê° ì ë¬ë ë, timeToLive ì íì¬ ìê°ì ë§ë£ ìê° ê°ì ëí ê°ìŽ ì€ì ëë€. ì§ì ë
ë§ë£ìê° ìŽíë¡ë ì ì¡ëì§ ìì ë©ìì§ë 몚ë íêž°ëë€. ìžëªš ìë ë©ìì§ë¥Œ
íêž°íšìŒë¡ìš ì ì¥ ê³µê°ê³Œ ê³ì°ëì 볎ì í ì ìê² ëë€.
ìì 목ì ì§ ìì±íêž°(Creating Temporary Destination)
ë³Žíµ JMS 목ì ì§(íì í íœ)ë íë¡ê·žëšì ìŒë¡ ë§ë€ìŽì§ë ê²ìŽ ìëëŒ êŽëŠ¬ìì ìíŽ
ë§ë€ìŽì§ë€. ë³Žíµ JMS íë¡ë°ìŽëë€ì 목ì ì§ë¥Œ ìì±íê±°ë ì ê±°í ì ìë ë구륌
ì ê³µíëë°, ìŽë° íŽë€ì ì€ë«ëì ì§ìëë 목ì ì§ë¥Œ ìíŽ ì¬ì©ëë€.
JMS API ë ìŽë¿ë§ ìëëŒ í¹ì í 컀ë¥ì
ìŽ ìì±ë í ìŽììë ëììë§ ì ì§ëë
목ì ì§(TemporaryQueue ë TemporaryTopic)ì ìì±íë êž°ë¥ë ì ê³µíë€. ìŽ ìì
목ì ì§ë€ì Session.createTemporaryQueue ë©ìëë Session.createTemporaryTopic
ë©ìë륌 ìŽì©íì¬ ë§ë€ ì ìë€.
ìì ì ì¥ì ëŽì ìë ë©ìì§ë¥Œ ìë¹í ì ìë ë©ìì§ ìë¹ìë íŽë¹ ì ì¥ì륌 ìì±íêž°
ìíŽ ì¬ì©íë 컀ë¥ì
ì ìŽì©íì¬ ìì±ë ìë¹ìë€ë¿ìŽë€. 몚ë ë©ìì§ ìì°ìë€ìŽ ìì
목ì ì§ë¡ ë©ìì§ë¥Œ ì ì¡í ì ìë€. ìì 목ì ì§ê° ìíŽ ìë 컀ë¥ì
ì ë«ìŒë©Ž(close), ìì
목ì ì§ ìì ë«íê² ëê³ ê·ž ìì ì ì¥ëìŽ ìë ëŽì©ë€ì 몚ë ì¬ëŒì§ë€.
ìì 목ì ì§ë ëšìí ìì²/ìëµ ë©ì»€ëìŠì 구ííêž° ìíŽ ì¬ì©ë ì ìë€. ìì 목ì ì§ë¥Œ
ìì±íê³ , ë©ìì§ì JMSReplyTo í€ë ê°ì ê·ž 목ì ì§ë¡ ì§ì í ë€ ì ì¡íë©Ž, ê·ž ë©ìì§ë¥Œ
ìì íì¬ ìë¹í ë©ìì§ ìë¹ìê° ê·ž ê°ì ìŽì©íì¬ ë€ì ê·ž ìì 목ì ì§ë¡ ìëµ ë©ìì§ë¥Œ
ì ì¡í ì ìë€. ìŽ ë ë©ìì§ ìë¹ìë JMSCorrelationID í€ë íë ê°ì ìë ì ë¬ëìë
ë©ìì§ì JMSMessageID ê°ìŒë¡ ì
ë ¥íì¬ ìë ë©ìì§ë¥Œ ì°žì¡°íëë¡ í ìë ìë€. ì륌
ë€ìŽ, onMessage ë©ìëìì session ì íë ìì±íì¬ ë©ìì§ë¥Œ ë³Žëž ìªœìŒë¡ ìëµì 볎ëŒ
ì ìë€. ë€ì ìœëììì ê°ìŽ ë§ìŽë€.
producer = session.createProducer (msg.getJMSReplyTo ());
replyMsg = session.createTextMessage ("Consumer " +
"processed message: " + msg.getText ());
replyMsg.setJMSCorrelationID (msg.getJMSMessageID ());
producer.send (replyMsg);
ë ììží ëŽì©ì [Java ë©ìì§ ìë¹ì€ ìì ] ì¥ì ì°žê³ íêžž ë°ëë€.
ìì ì±ì ìí ì§ë³Žë ë©ì»€ëìŠ
- 23. - 23 -
ë©ìì§ ì ë¬ì ë³Žë€ ìì ì ìŒë¡ íêž° ìí ê³ êž ë©ì»€ëìŠì ë€ì곌 ê°ë€.
ï¬ ì§ì 구ë
ìì±íêž°: ììì ìŽë¯ž ìžêžíìì§ë§, í íœì ëíŽ ì§ì 구ë
(durable
topic subscription)ì í ì ìëë°, ìŽë¥Œ ìŽì©íë©Ž 구ë
ìê° ì€íëê³ ìì§ ìì
ìíìì ë°íë ë©ìì§ë ìì í ì ìê² ëë€. ì§ì 구ë
ë°©ìì ë°í/구ë
ë°©ìì
ë©ìì§ ëë©ìžìë í륌 ì¬ì©íë ì ëì ìì ì±ì 볎ì¥íŽ ì€ë€.
ï¬ ë¡ì»¬ ížëìì
ìŽì©íêž°: ë¡ì»¬ ížëìì
ì ìŽì©íë©Ž ë©ìì§ë¥Œ ì ì¡íê³ ìì íë
ìŒë šì ìì
ë€ì ììíë íëì ìì
ìŒë¡ 묶ì ì ìë€. ìì
ì€ íëê°
ì€íšíêž°ë§ íë©Ž 몚ë ìì
ìŽ ë¡€ë°± ëë€.
ì§ì 구ë
ìì±íêž°(Creating Durable Subscriptions)
ë°í/구ë
ìŽí늬ìŒìŽì
ë€ìŽ 몚ë ë°íë ë©ìì§ë€ì ìì í ì ìëë¡ ë³Žì¥íêž° ìíŽìë,
ë°íìë€ì PERSISTENT ì ë¬ ëªšë륌, ê·žëŠ¬ê³ êµ¬ë
ììê²ë ì§ì 구ë
ì ì¬ì©íëë¡
íì¬ìŒ íë€.
í íœìŽ 목ì ì§ë¡ ì€ì ëìŽ ìë 겜ì°ììë Session.createComsumer ë©ìëë ì§ìëì§
ìë 구ë
ì(nondurable subscriber)륌 ìì±íê² ëë€. ì§ìëì§ ìë 구ë
ìë ìì ìŽ
ì€íëê³ ìë ìê°ì ë°íë ë©ìì§ë§ ìì í ì ìë€.
ì¢ ë ë§ì ììì ì¬ì©íêž°ë íì§ë§, Session.createDurableSubscriber ë©ìë륌
ìŽì©íë©Ž ì§ìëë 구ë
ì륌 ìì±í ì ìë€. ì§ì 구ë
ì ìŽì©í 겜ì°ìë ëìŒ ìì ì
ì€íëê³ ìë 구ë
ìë ì€ì§ íëì¬ìŒ íë€.
ì§ìëë 구ë
ìë JMS íë¡ë°ìŽëì ì ì§ëê³ ìë ì ìŒí ìë³ì(unique identity)륌
ì§ì íšìŒë¡ìš ì§ì 구ë
ì ë±ë¡í ì ìë€. ê·ž ë€ì ì€ë ëìŒí ìë³ì륌 ê°ì§ê³ ìë
구ë
ìë ìŽì 구ë
ìê° ìì
íì§ ìê³ ëšê²šë ëŽì©ì ìŽìŽì 구ë
íê² ëë€. ë§ìœ ì§ì
구ë
ì íê³ ìë ì€íì€ìž 구ë
ìê° íëë ìë€ë©Ž, JMS íë¡ë°ìŽëë 구ë
ìê°
ìì íê±°ë í¹ì ë©ìì§ê° ìë£ë ëê¹ì§ 구ë
ìë€ì ë©ìì§ë¥Œ ì ì§íê² ëë€.
ì§ì 구ë
ì ìí ì ìŒí ìë³ì륌 ë§ëë ë°©ë²ì ìë í목ì ì€ì íë©Ž ëë€.
ï¬ ì»€ë¥ì
ì ìí íŽëŒìŽìžíž ID
ï¬ êµ¬ë
ì륌 ìí í íœì ìŽëŠê³Œ 구ë
ëª
í¹ì íŽëŒìŽìžížì ëí 컀ë¥ì
í©í 늬륌 ìíŽ íŽëŒìŽìžíž ID ë ëª
ë ¹ ì€íì€ìŽë êŽëŠ¬ì
ìœìì ìŽì©íì¬ ì€ì í ì ìë€.
컀ë¥ì
곌 ìžì
ì ìì±íêž° ìíŽ ìŽ ì»€ë¥ì
í©í 늬륌 ìŽì©í ë€ì, ë ê°ì ì
ë ¥ê°ì ê°ë
createDurableSubscriber ë©ìë륌 ížì¶íë€: í íœê³Œ 구ë
ëª
ì ëíëŽë String ê°ì
ì
ë ¥íë€.
String subName = "MySub";
MessageConsumer topicSubscriber = session.createDurableSubscriber (myTopic, subName);
- 24. - 24 -
subscriber ë Connection ê°ì²Žë TopicConnection ê°ì²Žì start ë©ìë륌 ížì¶íë©Ž
íì±íëë€. ëì€ì ìŽ subscriber ê°ì²Žì close 륌 ížì¶í ì ìë€.
topicSubscriber.close ();
JMS íë¡ë°ìŽëë íì ì ì¡ë ë©ìì§ë¥Œ ì ì¥íë ê²ê³Œ ê°ìŽ í íœìŒë¡ ì ì¡ëê±°ë ë°íë
ë©ìì§ë€ì ì ì¥íë€.
ë§ìœ íë¡ê·žëšìŽë ë€ë¥ž ìŽí늬ìŒìŽì
ìŽ ëìŒí 컀ë¥ì
í©í 늬, íŽëŒìŽìžíž ID, í íœ,
구ë
ëª
ì ìŽì©íì¬ createDurableSubscriber ë©ìë륌 ížì¶íë©Ž, JMS íë¡ë°ìŽëë ê·ž
구ë
ìê° ë¹íì± ìíìì ë ë°íëìë 몚ë ë©ìì§ë¥Œ ì ì¡íê² ëë€.
ì§ì 구ë
ì ìì íë €ë©Ž, 뚌ì 구ë
ì륌 close í ë€ì, 구ë
ëª
ì ìŽì©íì¬ unsubscribe
ë©ìë륌 ížì¶íë©Ž ëë€.
topicSubscriber.close ();
session.unsubscribe (âMySubâ);
unsubscribe ë©ìëë íë¡ë°ëìŽê° íŽë¹ 구ë
ì륌 ìíŽ ì ì§íê³ ìë ìí ì 볎륌
ìì íëë¡ íë€.
귞늌 47-6 곌 47-7 ì ë¹ì§ì 구ë
ìì ì§ì 구ë
ìê°ì ì°šìŽì ì 볎ì¬ì£Œê³ ìë€. 볎íµì
겜ì°-ë¹ì§ì 구ë
ìì 겜ì°ìë, 구ë
ìì 구ë
ìŽ ëìŒ ìì ì ììëê³ ì¢
ë£ëë©°, ì€ì ë¡
ëìŒíë€. 구ë
ìê° ë«íê² ëìì ë, 구ë
ìì ëëê² ëë€. ì¬êž°ì create ë í íœì ëí
Session.createConsumer 륌 ì믞íê³ close ë MessageConsumer.close 륌 ì믞íë€. 첫
ë²ì§ž close ì ë ë²ì§ž create ì¬ìŽì ë°íë ë©ìì§ë€ì ìŽë í ê²ë 구ë
ìì ìíŽ
ìë¹ëì§ ìëë€. 귞늌 47-6 ìì 구ë
ìë M1, M2, M5, M6 ë©ìì§ë€ì ìë¹íì§ë§
M3 곌 M4 ë ì ì€ëë€.
ì§ì 구ë
ì 겜ì°, 구ë
ìë ë«íë€ê° ë€ì ìì±ë ì ììŒë©° ìŽí늬ìŒìŽì
ìŽ unsubscribe
ë©ìë륌 ížì¶íêž° ì ê¹ì§ë 구ë
ìŽ ì§ìëê³ ë©ìì§ë€ì ê³ì ì ì§íê² ëë€. 귞늌 47-
7 ìì create ë Session.createDurableSubscriber 륌 ì믞íê³ , close ë
MessageConsumer.close 륌, ê·žëŠ¬ê³ unsubscribe ë Session.unsubscribe 륌 ì믞íë€.
구ë
ìê° ë«í ìë ìê°ì ë°íëìë ë©ìì§ë€ì 구ë
ìê° ë€ì ìì±ëë©Ž ì ë¬ëê² ëë€.
ê·žëì 구ë
ìê° ë«í ìë ìíìì ì ë¬ëìë M2, M4, M5 ë©ìì§ë€ë ì ì€ëì§ ìë
ê²ìŽë€.
- 25. - 25 -
ì§ì 구ë
ì ìŽì©íë JavaEE ìŽí늬ìŒìŽì
ì ëí ìì ë, [ë©ìì§ íìž ìì ], [ì§ì 구ë
ìì ], ê·žëŠ¬ê³ [JMS API ì ìžì
ë¹ì ì¬ì©íë ìŽí늬ìŒìŽì
] ì¥ì ì°žê³ íêž° ë°ëë€.
JMS API ë¡ì»¬ ížëìì
ìŽì©íêž°(Using JMS API Local Transaction)
ì¬ë¬ ê°ì ìŒë šì ìì
ë€ì ížëìì
ìŽëŒ ë¶ëŠ¬ë íëì ììíë ìì
ìŒë¡ ë¬¶ìŒ ì ìë€.
ë§ìœ ìŽë€ íëì ìì
ìŽ ì€íšíê² ëë©Ž ížëìì
ëŽì 몚ë ìì
ìŽ ë¡€ë°± ëê³ , 몚ë ìì
ìŽ
ì²ìë¶í° ë€ì ììë ì ìë€. 몚ë ìì
ë€ìŽ ì±ê³µì ìŒë¡ ëëë©Ž ížëìì
ì ì»€ë° ëë€.
JMS íŽëŒìŽìžíž ëŽììë ë©ìì§ì ì ì¡ê³Œ ìì ì íëì ëšìë¡ ë¬¶êž° ìíŽ ë¡ì»¬
ížëìì
ì ìŽì©í ì ìë€. JMS API ì Session ìží°íìŽì€ìë JMS íŽëŒìŽìžížìì
ì¬ì©í ì ìë commit 곌 rollback ë©ìëê° ì ìëìŽ ìë€. ížëìì
commit ì 몚ë
ë©ìì§ë€ìŽ ì ì¡ëìê³ ëªšë ìë¹ë ë©ìì§ë€ìŽ íìžëììì ì믞íë€. ížëìì
rollback ì 몚ë ë©ìì§ë€ìŽ íꎎëê³ ëªšë ìë¹ë ë©ìì§ë€ìŽ 복구ëìŽ ë§ë£ëì§ ìë ìŽì
ë€ì ì ë¬ëë ê²ì ì믞íë€. ([ë©ìì§ ë§ë£ íì©íêž°]ì¥ ì°žì¡°)
ížëìì
ì²ëŠ¬ëë ìžì
ì ìžì ë ížëìì
ì êŽì¬íê² ëë€. commit ìŽë rollback
ë©ìëê° ížì¶ëë©Ž, ê·ž ìŠì ì€í ì€ìŽë ížëìì
ì ì¢
ë£ëê³ ìë¡ìŽ ížëìì
ìŽ ììëë€.
ížëìì
ì²ëŠ¬ëê³ ìë ìžì
ì ë«ìŒë©Ž ìì§ ìë£ëì§ ìì ì ì¡/ìì ìì
몚ë륌 í¬íší
íì¬ ì§í ì€ìž ížëìì
ì ëíŽ ë¡€ë°± ì²ëŠ¬ë¥Œ íê² ëë€.
ìí°íëŒìŽìŠ ìë°ë¹ 컎í¬ëíž ëŽììë Session.commit 곌 Session.rollback ë©ìë륌
ì¬ì©í ì ìë€. ê·ž ëì ë¶ì° ížëìì
(distributed transaction)ì ìŽì©í ì ìëë°, ê·ž
ëŽì©ì [JavaEE ìŽí늬ìŒìŽì
ëŽìì JMS API 륌 ì¬ì©íêž°] ì¥ì ì°žì¡°íêž° ë°ëë€.
ë¬Œë¡ ëª ê°ì ì ì¡ê³Œ ìì ì íëì JMS API ë¡ì»¬ ížëìì
ëŽì 묶ì ì ìë€. ê·žë ê² í
겜ì°, ìì
ì ìì륌 ë©Žë°í ìŽíŽë³ŽììŒ íë€. ížëìì
ìŽ ëªšë ì ì¡ê³Œ 몚ë ìì ì ëíŽ
ì¡í ìê±°ë íì ì ì¡ë³Žë€ ìì ìŽ ëšŒì ìŒìŽëê² ëë€ë©Ž ìë¬Žë° ë¬žì ê° ìë€. íì§ë§
ìì²/ìëµ ë©ì»€ëìŠì ì¬ì©íë €ê³ íë 겜ì°ììë, íëì ížëìì
ëŽìì ë©ìì§ë¥Œ
ì ì¡íê³ ìëµì ë°êž° ìíŽ êž°ë€ëŠ¬ê² ë ê²ìžë°, ê·žë ê² ëë©Ž ížëìì
ìŽ ì»€ë° ë ëê¹ì§
ì ì¡ ìì
ìŽ ìë£ë ì ììŒë¯ë¡ íë¡ê·žëšìŽ ë©ì¶°ë²ëŠ¬ê² ëë€.(program will hang) ìë
ìœëê° ìŽ ì륌 볎ì¬ì£Œê³ ìë€.
// Donât do this!
outMsg.setJMSReplyTo (replyQueue);
- 26. - 26 -
producer.send (outQueue, outMsg);
consumer = session.createConsumer (replyQueue);
inMsg = consumer.receive ();
session.commit ();
ížëìì
ìŽ ì»€ë° ëêž° ì ìë ì€ì ì ìŒë¡ ë©ìì§ ì ì¡ìŽ ì²ëŠ¬ëì§ ìêž° ë묞ì ížëìì
ëŽìë ìŽë í 겜ì°ìë ë©ìì§ ì ì¡ì ìì¡Žíë ë©ìì§ ìì ìŽ ììŽìë ì ëë€.
ì¶ê°ì ìŒë¡, íëì ë©ìì§ì ëí ìì°ê³Œ ìë¹ë ëìŒ ížëìì
ì ë¶ë¶ìŽ ë ì ìë€.
ížëìì
ìŽëŒë ê²ì JMS íŽëŒìŽìžížì JMS íë¡ë°ìŽë ê°ì ìŒìŽëë ê²ìŒë¡ ë©ìì§ì
ëí ìì°ê³Œ ìë¹ ì¬ìŽì ê°ì
íêž° ë묞ìŽë€. 귞늌 47-8 ìì ìŽ ìížìì©ì 볌 ì ìë€.
Client1 ìì íë í¹ì ê·ž ìŽìì ë©ìì§ë€ì íë ìŽìì 목ì ì§ë¡ ì ì¡íë ê²ì ëšìŒ
ížëìì
ìŒë¡ ë¬¶ìŒ ì ìëë°, ìŽë íëì ìžì
ì ìŽì©íë JMS íë¡ë°ìŽëì ëí íëì
ìížìì©ë§ ìííêž° ë묞ìŽë€. ë¹ì·íê² Client2 ê° íë í¹ì ê·ž ìŽìì 목ì ì§ë¡ë¶í° íë
ìŽìì ë©ìì§ë¥Œ ìì íë ê² ìì íëì ížëìì
ìŒë¡ ë¬¶ìŒ ì ìë€. íì§ë§ ë íŽëŒìŽìžíž
ì¬ìŽì ìŽë í ì§ì ì ìž ìížìì©ìŽ ë°ìíì§ ìê³ , ì¬ì©íë ìžì
ë ê°ê° ë€ë¥Žêž° ë묞ì, ìŽ
ë ê°ìë ížëìì
ìŽ ìŒìŽë ì ìë€.
ë€ë¥ž ë§ë¡ ì€ëª
íë©Ž, íëì ìžì
ì ëíŽ ë©ìì§ë¥Œ ìì°íê±°ë ìë¹íë ìì
ì
ížëìì
ìŒë¡ ì²ëŠ¬ë ì ìì§ë§, ìë¡ ë€ë¥ž ìžì
ê°ì ë©ìì§ê° ìì°/ìë¹ëë ê²ì
ížëìì
ìŒë¡ ì²ëŠ¬ë ì ìë€.
ìŽë ë©ìì§ê³Œ ëêž°íë íë¡ìžì±(synchronized processing) ê°ì Ʞ볞ì ìž ì°šìŽì ìŽë€.
ë°ìŽí°ë¥Œ ì£Œê³ ë°êž° ìíŽ ìë¡ ëšëšíê² ì°ê²°íë ëì , ë©ìì§ ìì°ìì ìë¹ìë JMS
íë¡ë°ìŽëê° ì ê³µíë íìí ë©ìì§ë¥Œ ëš íë²ë§ ì ë¬íëë¡ ë³Žì¥íë ìì ì ìž ì ê·Œ
ë°©ìì ìŽì©íë ê²ìŽë€.
ìžì
ì ìì±í ë, ížëìì
ì²ëŠ¬ë¥Œ í ê²ìžì§ ìëì§ë¥Œ ê²°ì í ì ìë€. createSession
ë©ìëì 첫 ë²ì§ž ì
ë ¥ê°ìŽ boolean ê°ìžë°, ìŽ ê°ìŽ true ìŽë©Ž ìŽ ìžì
ìŽ ížëìì
ì²ëŠ¬ëšì
ì믞íë€. ë¬Œë¡ false ìŽë©Ž ížëìì
ì²ëŠ¬ëì§ ììì ì믞íë€. ë ë²ì§ž ì
ë ¥ê°ì ì²ëŠ¬ íìž
몚ëìžë°, ìŽë ížëìì
ì²ëŠ¬ëì§ ìë ìžì
ìŒ ëìë§ ìë¯žê° ìë€. ([ë©ìì§ íìž ì ìŽíêž°]
ì¥ ì°žì¡°) ìžì
ìŽ ížëìì
ìŒë¡ ì§ì ëë©Ž, ë ë²ì§ž ì
ë ¥ê°ì 묎ìëë©°, ê·žë êž° ë묞ì ìŽë°
겜ì°ìë ë ë²ì§ž ì
ë ¥ ê°ì 0 ìŒë¡ ì§ì íë ê²ìŽ ìœë륌 ì¢ ë ìœêž° ìœê² íŽ ì€ ê²ìŽë€. ë€ì
ìììì ê°ìŽ ë§ìŽë€.
session = connection.createSession (true, 0);
ë¡ì»¬ ížëìì
ì ëí commit 곌 rollback ë©ìëë íŽë¹ ìžì
ì ì°êŽëìŽ ìë€. ì¬ë¬ ê°ì
ìì
ì ìííë€ íëëŒë íëì ìžì
ë§ ìŽì©íë€ë©Ž íì í íœì ëí ìì
ë€ ìì íëì
- 27. - 27 -
ížëìì
ìŒë¡ ë¬¶ìŒ ì ìë€. ì륌 ë€ìŽ, ëìŒí ìžì
ì íë¡ë¶í° ë©ìì§ë¥Œ ìì íì¬ ê°ì
ìžì
ì í íœìŒë¡ ë©ìì§ë¥Œ ì ì¡íë ìì
곌 ê°ì ìŒë šì ìì
ë€ë ížëìì
ìŒë¡ ë¬¶ìŒ ì
ìë€ë ë§ìŽë€.
ë, ë©ìì§ ëŠ¬ì€ëì ìì±ìì íŽëŒìŽìžíž íë¡ê·žëšì ìžì
ì ì
ë ¥íì¬ ë©ìì§ ìì°ì륌
ë§ëë ë° ì¬ì©í ìë ìë€. ìŽ ë°©ë²ì ìŽì©íì¬ ë¹ëêž° ë©ìì§ ìë¹ì ëŽìì ë©ìì§ë¥Œ
ìì íê³ ì ì¡íë ë°ì ëìŒí ìžì
ì ìŽì©í ì ìë€.
[ë¡ì»¬ ížëìì
ìì ] ì¥ìì JMS API ë¡ì»¬ ížëìì
ì ìŽì©íë ì륌 íìží ì ìë€.