<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Activemq和Lingo實現(xiàn)JMS和異步調(diào)用

    Posted on 2009-06-04 20:11 林光炎 閱讀(333) 評論(0)  編輯  收藏 所屬分類: J2EE
    jms是大家在項目中經(jīng)常用到的技術(shù),而activemq又是開源的jms產(chǎn)品中比較優(yōu)秀的。在應(yīng)用JMS處理相關(guān)業(yè)務(wù)時,大家都是構(gòu)造消息,然后發(fā)送到隊列,最后用message監(jiān)聽器監(jiān)聽到消息,對消息進(jìn)行分析處理。在這個過程中,有兩步是比較麻煩和重復(fù)的,那就是構(gòu)造消息和拆解消息。并且這樣與面向?qū)ο蟮乃枷牒苁沁`背。如果這樣做顯然是面向消息數(shù)據(jù)的,而不是面向?qū)ο蟮摹;谝陨显颍蚁虼蠹医榻B一個我在項目中經(jīng)過實踐的開源框架:lingo.
      lingo在JMS中起的主要作用就是對消息的封裝,它讓你可以不必關(guān)心消息的構(gòu)造和拆解,而只需關(guān)心你本身的業(yè)務(wù)邏輯。我將舉一個例子,分別用activemq直接實現(xiàn)和用lingo實現(xiàn)。在這個例子中我用到了spring framework.
      =================================Hello.java===========================
      import java.io.Serializable;
      /**Hello.java用來傳遞JAVA對象
      * Author: cjp
      * Date: 2005-11-8
      * Time: 22:24:02
      */
      public class Hello implements Serializable {
      private String id;
      private Hello hello;
      private PointList pointList;
      public String getId() {
      return id;
      }
      public void setId(String id) {
      this.id = id;
      }
      public Hello getHello() {
      return hello;
      }
      public void setHello(Hello hello) {
      this.hello = hello;
      }
      }
      =========================SpringTest .java========================
      import org.springframework.jms.core.JmsTemplate;
      import org.springframework.jms.core.MessageCreator;
      import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
      import javax.jms.*;
      /**
      *發(fā)送JMS消息
      */
      public class SpringTest extends AbstractDependencyInjectionSpringContextTests
      {
      protected String[] getConfigLocations()
      {
      return new String[]{"file:D:\\wosame\\test\\com\\wosame\\room\\jms\\jms.xml"};
      }
      public void testSendMessage() throws Exception
      {
      JmsTemplate jmsTemplate = (JmsTemplate) applicationContext.getBean("jmsTemplate");
      jmsTemplate.send(new MessageCreator()
      {
      public Message createMessage(Session session) throws JMSException
      {
      ObjectMessage message=session.createObjectMessage();
      Hello hello=new Hello();
      hello.setId("test");
      message.setObject(hello);
      return message;
      }
      });
      }
      }
      ================================HelloMDP .java==================================
      /**
      處理JMS消息
      */
      import org.apache.commons.logging.Log;
      import org.apache.commons.logging.LogFactory;
      import javax.jms.*;
      public class HelloMDP implements MessageListener
      {
      protected Log log = LogFactory.getLog(HelloMDP.class);
      public void onMessage(Message message)
      {
      try
      {
      ObjectMessage objMessage = (ObjectMessage) message;
      Hello hello= (Hello) objMessage.getObject();
      System.out.println("hello.getId() = " + hello.getId());
      } catch (JMSException e)
      {
      log.error("Parse failed", e);
      }
      }
      }
      ================================jms.xml==================================
      <?xml version="1.0" encoding="UTF-8"?
      <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
      "http://www.springframework.org/dtd/spring-beans.dtd"
      <beans
      <!--嵌入式的JMS連接,也就是跟隨JVM一起啟動,可以參看activemq的文檔--
      <bean id="connectionFactory" class="org.activemq.ActiveMQConnectionFactory" <property name="brokerURL" value="vm://localhost"/
      <property name="useEmbeddedBroker" value="true"/
      </bean
      <!--消息監(jiān)聽器,也就是消息的具體的處理器--
      <bean id="HelloMDP" class="HelloMDP"/
      <!--jms監(jiān)聽需要JTA容器的支持--
      <bean id="activeMQContainer" class="org.activemq.jca.JCAContainer"
      <property name="workManager"
      <bean id="workManager" class="org.activemq.work.SpringWorkManager"/
      </property
      <property name="resourceAdapter"
      <bean id="activeMQResourceAdapter" class="org.activemq.ra.ActiveMQResourceAdapter"
      <property name="serverUrl" value="vm://localhost"/
      </bean
      </property
      </bean
      <!--消息的消費者,也就是將監(jiān)聽器與具體的隊列關(guān)聯(lián)--
      <bean id="HelloQueueConsumer" factory-method="addConnector" factory-bean="activeMQContainer"
      <property name="activationSpec"
      <bean class="org.activemq.ra.ActiveMQActivationSpec"
      <property name="destination" value="Hello.Queue"/
      <property name="destinationType" value="javax.jms.Queue"/
      </bean
      </property
      <property name="ref" value="HelloMDP"/
      </bean
      <!--spring的JMS template,用來發(fā)送JMS消息到指定的隊列--
      <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"
      <property name="defaultDestinationName" value="Hello.Queue"/
      <property name="connectionFactory" ref="connectionFactory"/
      </bean
      </beans

     

     

     

    posts - 104, comments - 33, trackbacks - 0, articles - 0

    Copyright © 林光炎

    主站蜘蛛池模板: 久久久久亚洲精品日久生情| 国产亚洲精品a在线无码| 亚洲av日韩av无码av| 91麻豆国产免费观看| 亚洲字幕在线观看| 青娱乐免费视频在线观看| 激情综合亚洲色婷婷五月| 成人黄页网站免费观看大全| 亚洲色大成网站www永久男同| 亚洲男同帅GAY片在线观看| 久久久久免费视频| 亚洲午夜AV无码专区在线播放| 亚洲激情视频在线观看| 国产四虎免费精品视频| 亚洲www在线观看| 国产又黄又爽又刺激的免费网址 | 免费一级毛片在线播放视频| 亚洲中文字幕无码爆乳AV| 好吊色永久免费视频大全| 久久久久久久久亚洲 | 成年免费a级毛片免费看无码| jjizz全部免费看片| 亚洲色精品三区二区一区| 亚洲成a人片在线观看久| 最好免费观看高清在线| 亚洲av无码一区二区三区天堂古代| 亚洲精品国产日韩无码AV永久免费网| 国产福利视精品永久免费| 亚洲精品久久久久无码AV片软件| 91久久成人免费| 精品国产亚洲一区二区三区在线观看 | 亚洲免费中文字幕| 亚洲av无码专区在线观看下载| 精品成在人线AV无码免费看| 亚洲成AV人影片在线观看| 亚洲色成人WWW永久网站| 成人AV免费网址在线观看| 国产精品亚洲专区无码不卡| 亚洲人成在线观看| 国产一区二区视频免费| 亚洲a一级免费视频|