Activemq和Lingo實現JMS和非同步呼叫(轉)

post0發表於2007-09-06
Activemq和Lingo實現JMS和非同步呼叫(轉)[@more@]

  jms是大家在專案中經常用到的技術,而activemq又是開源的jms產品中比較優秀的。在應用JMS處理相關業務時,大家都是構造訊息,然後傳送到佇列,最後用message監聽器監聽到訊息,對訊息進行分析處理。在這個過程中,有兩步是比較麻煩和重複的,那就是構造訊息和拆解訊息。並且這樣與物件導向的思想很是違背。如果這樣做顯然是面向訊息資料的,而不是物件導向的。基於以上原因,我向大家介紹一個我在專案中經過實踐的開源框架:lingo.

  lingo在JMS中起的主要作用就是對訊息的封裝,它讓你可以不必關心訊息的構造和拆解,而只需關心你本身的業務邏輯。我將舉一個例子,分別用activemq直接實現和用lingo實現。在這個例子中我用到了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.*;

  /**

  *傳送JMS訊息

  */

  public class SpringTest extends AbstractDependencyInjectionSpringContextTests

  {

  protected String[] getConfigLocations()

  {

  return new String[]{"file:D:wosame estcomwosame oomjmsjms.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==================================

  

  P>

  "">

  

  <!--嵌入式的JMS連線,也就是跟隨JVM一起啟動,可以參看activemq的文件--&gt

  

  

  

  <!--訊息監聽器,也就是訊息的具體的處理器--&gt

  

  <!--jms監聽需要JTA容器的支援--&gt

  

  

  

  

  

  

  

  

  

  

  <!--訊息的消費者,也就是將監聽器與具體的佇列關聯--&gt

  

  

  

  

  

  

  

  

  

  <!--spring的JMS template,用來傳送JMS訊息到指定的佇列--&gt

  

  

  

  

  

·上一篇:

·下一篇:
 
     最新更新
·

·

·

·

·

·

·WeblogicServer9新特性:J2EELibraries

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·使用訊息驅動Beans(3)

·

·

·

·


| | | | | | |

Copyright © 2004 - 2007 All Rights Reserved

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-968179/,如需轉載,請註明出處,否則將追究法律責任。

Activemq和Lingo實現JMS和非同步呼叫(轉)
請登入後發表評論 登入
全部評論

相關文章