¡¡¡¡ÔÚ·Ö²¼Ê½ÆóÒµ¼¶Ó¦ÓóÌÐòÖУ¬Òì²½ÏûÏ¢»úÖÆÓÃÓÚÓÐЧµØÐµ÷¸÷¸ö²¿·ÖµÄ¹¤×÷¡£
¡¡¡¡J2EEΪÎÒÃÇÌṩÁËJMSºÍÏûÏ¢Çý¶¯¶¹£¨Message-Driven Bean£©£¬ÓÃÀ´ÊµÏÖÓ¦ÓóÌÐò¸÷¸ö²¿¼þÖ®¼äµÄÒì²½ÏûÏ¢´«µÝ¡£
¡¡¡¡
Ò»£®Ê²Ã´ÊÇÏûϢϵͳ£¿ ¡¡¡¡Í¨³£Ò»¸öÏûϢϵͳÔÊÐí·Ö¿ªµÄδñîºÏµÄÓ¦ÓóÌÐòÖ®¼ä¿É¿¿µØÒ첽ͨÐÅ¡£ÔÚÆóÒµÓ¦ÓÃʱ£¬ÐèÒªÒ»ÖÖÒì²½µÄ£¬·Ç×èÈûµÄÏûÏ¢´«µÝ¡£±ÈÈ磬һ¸ö¿Í»§¶Ë¿ÉÄÜÏ£Íû¸øÒ»¸ö·þÎñÆ÷·¢ËÍÒ»¸öÇëÇóºó£¬²»ÔÚºõÊÇ·ñÂíÉÏÄܵõ½»ØÓ¦¡£ÕâÑù£¬¿Í»§¶ËûÓÐÀíÓɱØÐëµÈ´ý·þÎñÆ÷´¦ÀíÇëÇ󡣿ͻ§¶ËÓ¦ÓóÌÐòÔڵݽ»Ò»¸öÇëÇóÖ®ºó£¬Ö»ÐèÈ·±£ÇëÇóµ½´ï·þÎñÆ÷¶Ëºó£¬¾Í¿ÉÒÔ´¦ÀíÆäËûÈÎÎñ¡£Í¨³££¬ÕâÊǺܸßЧµÄ¡£ÏûϢϵͳÌṩÁËÐí¶àÆäËû·Ö²¼Ê½¶ÔÏó¼ÆËãÄ£ÐÍûÓеÄÓŵ㡣Ëü¹ÄÀøÔÚÏûÏ¢²úÉúÕߺÍʹÓÃÕßÖ®¼äµÄ"ËÉñîºÏ"£¬ÔÚËüÃÇÖ®¼äÓк̶ܸ߳ȵÄÊÂÎñ´¦Àí¡£¶ÔÓÚʹÓÃÕߣ¬Ëü²»ÔÚºõ˲úÉúÁËÏûÏ¢£¬²úÉúÕßÊÇ·ñÈÔÔÚÍøÂçÉÏÒÔ¼°ÏûÏ¢ÊÇʲôʱºò²úÉúµÄ¡£Õâ¾ÍÔÊÐí½¨Á¢¶¯Ì¬µÄ£¬¿É¿¿µÄºÍÁé»îµÄϵͳ¡£Õû¸öµÄ×ÓϵͳÄܱ»Ð޸Ķø²»»áÓ°ÏìϵͳµÄÆäËû²¿·Ö¡£
¡¡¡¡ÁíÍâµÄÓŵã°üÀ¨£ºÏµÍ³µÄ¸ß¶È¿ÉÀ©Õ¹ÐÔ£¬ÈÝÒ×ÓëÆäËûϵͳ½øÐм¯³É£¬ÒÔ¼°¸ß¶ÈµÄ¿É¿¿ÐÔ¡£ÓÉÓÚ¿É¿¿ÐԺͿÉÀ©Õ¹ÐÔ£¬Ê¹µÃËüÃÇÓÃÓÚ½â¾öÐí¶àÉÌÒµºÍ¿ÆÑ§¼ÆËãÎÊÌâ¡£±ÈÈ磬ÏûϢϵͳÊÇÐí¶àÓ¦ÓóÌÐòµÄ»ù´¡£¬ÕâЩӦÓóÌÐò¿ÉÒÔÊǹ¤×÷Á÷£¬ÍøÂç¹ÜÀí£¬Í¨ÐÅ·þÎñ»ò¹©Ó¦Á´¹ÜÀí³ÌÐò¡£ÔÚJAVA¼¼ÊõÖУ¬´¦ÀíÒì²½ÏûÏ¢µÄÄÜÁ¦ÊÇͨ¹ýJMSÀ´ÊµÏֵġ£JMS×î³õÉè¼ÆÊÇΪÁ˸ø´«Í³µÄÏûÏ¢¶ÔÏóÖмä¼þÌṩһ¸ö±ê×¼µÄJAVA½Ó¿Ú¡£¶øÕâЩ²úÆ·ÊÇÔÚÒ»¸öÆóÒµ¼¶Ó¦ÓóÌÐòÖбØÐëµÄ¡£ÏÖÔÚ³öÏÖÁËÐí¶àÖ§³ÖJMSµÄ´¿JAVAµÄ²úÆ·¡£
¡¡¡¡
ÏûϢϵͳÀàÐÍ¡¡¡¡Í¨³£ÓÐÁ½ÖÖÏûÏ¢ÀàÐÍ¡£
¡¡¡¡1.·¢²¼/¶©ÔÄ£¨publish/subscribe£©
¡¡¡¡·¢²¼/¶©ÔÄÏûϢϵͳ֧³ÖÒ»¸öʼþÇý¶¯Ä£ÐÍ£¬ÏûÏ¢²úÉúÕߺÍʹÓÃÕß¶¼²ÎÓëÏûÏ¢µÄ´«µÝ¡£²úÉúÕß·¢²¼Ê¼þ£¬¶øÊ¹ÓÃÕß¶©ÔĸÐÐËȤµÄʼþ£¬²¢Ê¹ÓÃʼþ¡£²úÉúÕß½«ÏûÏ¢ºÍÒ»¸öÌØ¶¨µÄÖ÷Ì⣨Topic£©Á¬ÔÚÒ»Æð£¬ÏûϢϵͳ¸ù¾ÝʹÓÃÕß×¢²áµÄÐËȤ£¬½«ÏûÏ¢´«¸øÊ¹ÓÃÕß¡£
¡¡¡¡2.µã¶Ôµã£¨Peer to peer£©
¡¡¡¡ÔÚµã¶ÔµãµÄÏûϢϵͳÖУ¬ÏûÏ¢·Ö·¢¸øÒ»¸öµ¥¶ÀµÄʹÓÃÕß¡£Ëüά³ÖÒ»¸ö"½øÈë"ÏûÏ¢¶ÓÁС£ÏûÏ¢Ó¦ÓóÌÐò·¢ËÍÏûÏ¢µ½Ò»¸öÌØ¶¨µÄ¶ÓÁУ¬¶ø¿Í»§¶Ë´ÓÒ»¸ö¶ÓÁÐÖеõ½ÏûÏ¢¡£
¡¡¡¡
¶þ£®JMS¼ò½é ¡¡¡¡JMSµÄÄ¿µÄÊÇÌṩ¸øÏûϢϵͳ¿Í»§Ò»¸ö¹Ì¶¨µÄ½Ó¿Ú£¬¶øÇÒÓëµ×²ãµÄÏûÏ¢ÌṩÕßÎ޹ء£ÕâÑù£¬¿Í»§¶ËµÄÓ¦ÓóÌÐò¿ÉÒÔÔÚ²»Í¬µÄ»úÆ÷ºÍ²Ù×÷ϵͳÖÐÒÆÖ²£¬¶
øÇÒÄÜÔÚ²»Í¬µÄÏûϢϵͳ²úÆ·Ö®¼ä×ªÒÆ¡£JMS¿Í»§¶Ë¶¼Êǽ¨Á¢ÔÚJAVA¼¼ÊõÉϵ쬴ӶøÒ²ÄÜʹÓÃÆäËûJAVAAPI£¬ÈçJDBCÊý¾Ý¿âÁ¬½Ó£¬Ê¹ÓÃJAVABEAN×é¼þÄ£ÐÍ£¬JDNIÃû×Ö·þÎñ£¬JTA¿Í»§¶ËÊÂÎñ´¦Àí¿ØÖÆÒÔ¼°J2SEºÍJ2EE APIÀ´ÊµÏÖÆóÒµ¼¶Ó¦Ó÷þÎñ³ÌÐò¡£
¡¡¡¡1.JMS¶ÔÏóÄ£ÐÍ
¡¡¡¡Í¼1ÏÔʾÁËJMS¶ÔÏó£¬ÓÃÓÚÌṩJMS¿Í»§¶ËÓëJMS·þÎñÌṩÕßÏàÁ¬µÄ¶ÔÏó¡£
¡¡¡¡ConnectionFactoryÊÇÒ»¸ö¿Í»§¶ËÓÃÀ´´´½¨Ò»¸öConnectionµÄ¹ÜÀí¶ÔÏó¡£ÓÉÓÚÔÚConnection´´½¨Ê±ÓÐÊÚȨºÍͨÐŽ¨Á¢¹ý³Ì£¬Òò´ËÕâ¸ö¶ÔÏóÊDZȽϴóµÄ¡£
¡¡¡¡Destination¶ÔÏó½«Ò»¸öÏûÏ¢µÄÄ¿µÄºÍ·þÎñÌṩÕßÓйصĵØÖ·¼°ÅäÖÃÐÅÏ¢°ü×°ÆðÀ´¡£
¡¡¡¡SessionÊÇJMSʵÌ壬ÓÃÀ´Ö§³ÖÊÂÎñ´¦ÀíºÍÒì²½ÏûÏ¢Ïû·Ñ¡£JMS²¢²»ÐèÒª¿Í»§¶ËµÄ´úÂëÓÃÓÚÒì²½ÏûÏ¢Ïû·Ñ»òÄÜ´¦Àí¶à¸ö²¢·¢ÏûÏ¢¡£Í¨³££¬ÊÂÎñµÄ¸´ÔÓÐÔ¶¼ÓÉÒ»¸öSessionÀ´·â×°¡£
¡¡¡¡Ò»¸öSessionÊÇÒ»¸öÔ×Óµ¥Î»µÄ¹¤×÷£¬ÓëÊý¾Ý¿âµÄÊÂÎñÒ»Ñù£¬ÒªÊµÏÖ¶àÏß³ÌÊÂÎñ±È½ÏÀ§ÄÑ¡£SessionÌṩÁËÔÚÒ»¸öÏ̱߳à³ÌģʽϵIJ¢·¢µÄÓŵ㡣
¡¡¡¡MessageProducerºÍMessageConsumer¶ÔÏóÓÉSession¶ÔÏó´´½¨¡£ÓÃÓÚ·¢ËͺͽÓÊÜÏûÏ¢¡£ÎªÁËÈ·±£ÏûÏ¢µÄ´«µÝ£¬JMS·þÎñÌṩÕß´¦ÀíµÄÏûÏ¢¶¼Òª´¦ÓÚPERSISTENTģʽ¡£PERSISTENTģʽʹµÃJMSÌṩÕß³öÎÊÌâºó£¬Ò²ÄÜÈÃÏûÏ¢±£´æÏÂÀ´¡£
¡¡¡¡Session£¬MessageProducerºÍMessageConsumer¶¼²»Ö§³Ö²¢·¢£¬¶øConnectionFactory£¬DestinationºÍConnection¶¼Ö§³Ö²¢·¢¡£
¡¡¡¡2.JMSÓ¦ÓóÌÐò¿ª·¢
¡¡¡¡JMSÖеÄÏûÏ¢
¡¡¡¡ÔÚÏûϢϵͳÖУ¬Ó¦ÓóÌÐòÖ®¼äͨÐŵĹؼüÊÇÏûÏ¢¡£Òò´ËʹÓÃJMS±ØÐëÒªÏÈÀí½âÏûÏ¢¡£
¡¡¡¡ÔÚJMSÖУ¬ÏûÏ¢ÓÉÈý²¿·Ö×é³É£º
¡¡¡¡MESSAGE HEADERÓÃÓÚʶ±ðÏûÏ¢£¬±ÈÈçÓÃÓÚÅжÏÒ»¸ö¸ø¶¨µÄÏûÏ¢ÊÇ·ñÊÇÒ»¸ö"¶©ÔÄÕß"
¡¡¡¡PROPERITIESÓÃÓÚÓëÓ¦ÓóÌÐòÏà¹ØµÄ£¬ÌṩÕßÏà¹ØµÄºÍ¿ÉÑ¡ÏîµÄÐÅÏ¢
¡¡¡¡BODYÊÇÏûÏ¢µÄÄÚÈÝ£¬Ö§³Ö¼¸ÖÖ¸ñʽ£¬°üÀ¨TextMessage£¨¶ÔStringÒ»¸ö¼òµ¥µÄ·â×°£©ºÍObjectMessage£¨¶ÔÈÎÒâ¶ÔÏóµÄ·â×°£¬µ«±ØÐëÖ§³ÖÐòÁл¯£©£¬Ò²Ö§³ÖÆäËû¸ñʽ¡£
¡¡¡¡TextMessage
¡¡¡¡Ò»¸öTextMessageÊÇÒ»¸öString¶ÔÏóµÄ·â×°¡£ÔÚÖ»ÓÐÎı¾¶ÔÏó´«µÝʱ£¬ÊǺÜÓÐÓõġ£Ëü¼ÙÉèÐí¶àÏûϢϵͳÊǽ¨Á¢ÔÚXMLÉϵġ£´Ó¶øTextMessage¾Í¿ÉÒÔ³ÉΪ°ü×°ËüÃǵÄÈÝÆ÷¡£
¡¡¡¡´´½¨Ò»¸öTextMessage¶ÔÏóºÜ¼òµ¥£¬ÈçÏÂÃæµÄ´úÂ룺
¡¡¡¡TextMessage message=session.createMessage£¨£©;
¡¡¡¡message.setText£¨"Hello, world!"£©;
¡¡¡¡ObjectMessage
¡¡¡¡ÈçÃû×ÖËùʾ£¬ËüÊǶÔÒ»¸öJAVA¶ÔÏóµÄ·â×°µÄÏûÏ¢¡£ÈκοÉÐòÁл¯µÄJAVA¶ÔÏó¶¼ÄÜÓÃÓÚObjectMessage£¬Èç¹û±ØÐ뽫¶à¸ö¶ÔÏó·â×°ÔÚÒ»¸öÏûÏ¢Àï´«µÝ£¬¿ÉÒÔʹÓÃCollection¶ÔÏó£¬À´°üÀ¨¶à¸öÐòÁл¯¶ÔÏó¡£
¡¡¡¡ÏÂÃæÊÇ´´½¨Ò»¸öObjectMessage
¡¡¡¡ObjectMessage message=session.createObjectMessage£¨£©;
¡¡
¡¡message.setObject£¨myObject£©;
¡¡¡¡´´½¨Ò»¸öJMS¿Í»§¶Ë³ÌÐò
¡¡¡¡Ò»¸öµäÐ͵ÄJMS¿Í»§¶ËÓÉÏÂÃæµÄ¼¸¸ö»ù±¾²½ÖèÀ´´´½¨£º
¡¡¡¡´´½¨Ò»¸öµ½ÏûϢϵͳÌṩÕßµÄÁ¬½Ó£¨Connection£©
¡¡¡¡´´½¨Ò»¸öSession£¬ÓÃÓÚ½ÓÊպͷ¢ËÍÏûÏ¢
¡¡¡¡´´½¨MessageProducerºÍMessageConsumerÀ´´´½¨ºÍ½ÓÊÕÏûÏ¢
¡¡¡¡µ±Íê³ÉÁËÉÏÊö²½Öèºó£¬Ò»¸öÏûÏ¢²úÉúÕ߿ͻ§¶Ë½«´´½¨²¢·¢²¼ÏûÏ¢µ½Ò»¸öÖ÷Ì⣬¶øÏûϢʹÓÃÕ߿ͻ§¶Ë»á½ÓÊÕÓëÒ»¸öÖ÷ÌâÏà¹ØµÄÏûÏ¢¡£
¡¡¡¡1.´´½¨Ò»¸öConnection
¡¡¡¡Ò»¸öConnectionÌṩ¿Í»§¶Ë¶Ôµ×²ãµÄÏûϢϵͳµÄ·ÃÎÊ¡£²¢ÊµÏÖ×ÊÔ´µÄ·ÖÅäºÍ¹ÜÀí¡£Í¨¹ýʹÓÃÒ»¸öConnectionFactoryÀ´´´½¨Ò»¸öConnection£¬Í¨³£ÓÃJDNIÀ´Ö¸¶¨£º
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=1 align=center borderColorLight=#000000 border=1>
<tr>
<td style="FONT-SIZE: 9pt">Connection message=new initialContext£¨£©;
TopicConnectionFactory topicConnectionFactory=£¨TopicConnectionFactory£©;
topic = £¨Topic£© jndiContext.lookup£¨topicName£©;
topicConnection =topicConnectionFactory.createTopicConnection£¨£©;</td></tr></table>
¡¡¡¡2.´´½¨Ò»¸öSession
¡¡¡¡SessionÊÇÒ»¸ö±È½Ï´óµÄJMS¶ÔÏó£¬ËûÌṩÁËÉú²úºÍÏû·ÑÏûÏ¢µÄÊֶΡ£ÓÃÓÚ´´½¨ÏûϢʹÓÃÕߺÍÏûÏ¢²úÉúÕß¡£
¡¡¡¡topicSession = topicConnection.createTopicSession£¨false,Session.AUTO_ACKNOWLEDGE£©;
¡¡¡¡Á½¸ö²ÎÊýÓÃÓÚ¿ØÖÆÊÂÎñºÍÏûϢȷÈÏ¡£
¡¡¡¡3.¶¨Î»Ò»¸öTopic
¡¡¡¡ÓÃJDNIÀ´¶¨Î»Ò»¸öTopic£¬TopicÓÃÓÚʶ±ð·¢ËÍ»ò½ÓÊÕµÄÏûÏ¢£¬ÔÚ·¢²¼/¶©ÔÄϵͳÖС£¶©ÔÄÕß¶©ÔÄÒ»¸ö¸ø¶¨µÄTopic£¬¶ø·¢²¼Õß½«Ëü·¢²¼µÄÏûÏ¢ÓëÒ»¸öTopicÏàÁ¬¡£
¡¡¡¡ÏÂÃæÊÇ´´½¨Ò»¸öTopic "WeatherReport"
¡¡¡¡Topic weatherTopic=messaging.lookup£¨"WeatherReport"£©;
¡¡¡¡4.Æô¶¯Connection
¡¡¡¡ÔÚÉÏÃæµÄ³õʼ»¯²½ÖèÖ®ºó£¬ÏûÏ¢Á÷ÊǽûÖ¹µÄ£¬ÓÃÓÚ·ÀÖ¹ÔÚ³õʼ»¯Ê±·¢Éú²»¿ÉÔ¤ÁϵÄÐÐΪ¡£Ò»µ©³õʼ»¯½áÊø£¬±ØÐëÈÃConnectionÆô¶¯ÏûϢϵͳ¡£
¡¡¡¡topicConnection.start£¨£©;
¡¡¡¡5.´´½¨Ò»¸öÏûÏ¢²úÉúÕß
¡¡¡¡ÔÚ·¢²¼/¶©ÔÄÀһ¸ö²úÉúÕß·¢²¼ÏûÏ¢µ½Ò»¸öÖ¸¶¨µÄTopic¡£ÏÂÃæµÄ´úÂëÏÔʾ´´½¨Ò»¸ö²úÉúÕߣ¬ÒÔ¼°ºóÐøµÄ½¨Á¢ºÍ·¢²¼Ò»¸ö¼òµ¥Îı¾ÏûÏ¢¡£
¡¡¡¡TopicPublisher publisher=session.createPublisher£¨weatherTopic£©;
¡¡¡¡TexeMessage message=session.createMessage£¨£©;
¡¡¡¡message.setText£¨"ssss"£©;
¡¡¡¡publisher.publish£¨message£©;
¡¡¡¡ÏÂÃæÊÇÒ»¸öÏûϢʹÓÃÕߵĴúÂë
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=1 align=center borderColorLight=#000000 border=1>
<tr>
<td style="FONT-SIZE: 9pt">topicConnection =topicConnectionFactory.createTopicConnection£¨£©;
topicSession = topicConnection.createTopicSession£¨false, Session.AUTO_ACKNOWLEDGE£©;
topicSubscriber = topicSession.createSubscriber£¨topic£©;
topicListener = new MsgListener£¨£©;
topicSubscriber.setMessageListener£¨topicListener£©;
topicConnection.start£¨£©;</td></tr></table>