細心!用心!耐心!

          吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業,五六點粗墨,七八筆買賣,九十道人情。

          BlogJava 聯系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks

          JMS入門之實例

          JMS是一個由AS提供的Message服務。它能接受消息產生者(Message Provider)所發出的消息,并把消息轉發給消息消費者(Message  Consumer)。
          2、JMS提供2種類型的消息服務:(1)Queue,即點對點,每個消息只轉發給一個消息消費者使用。(2)Topic,即發布和訂閱,每個消息可以轉發給所有的訂閱者(消費者)。
          3、WEBLOGIC 8下的JMS配置:
          (1)配置JMS Connection Factory
          (2)配置JMS File Store(目前所找到的文檔都是配置File Store,其實在具體的應用中,可能JMS JDBC Store更廣泛,但暫時沒有找到資料)
          (3)配置JMS Server
          (4)在JMS Server的destinations中配置JMS Queue或者JMS Topic
          其中提供給消息產生者和消息消費者使用的是JMS Connection Factory的JNDI和JMS Queue或者JMS Topic的JNDI。
          4、消息產生者向JMS發送消息的步驟:
          (1)使用JNDI查詢對象JMS ConnectionFactory和Destination(JMS Queue/Topic)
          (2)使用管理對象JMS ConnectionFactory建立連接Connection
          (3)使用連接Connection 建立會話Session
          (4)使用會話Session和管理對象Destination創建消息生產者MessageSender
          (5)使用消息生產者MessageSender發送消息
          一個消息發送者的例子:
          package myjms;
          import java.util.*;
          import javax.naming.*;
          import javax.jms.*;

          public class MessageProducter {
            public static void main(String[] args) {
              String queueConnectionFactoryName = "myjmsconnectionfactory"; //JMS Connection Factory的JNDI
              String queueName = "myjmsqueue"; //JMS Queue或者JMS Topic的JNDI

              boolean transacted = false;//transaction模式
              int acknowledgementMode = Session.AUTO_ACKNOWLEDGE;//acknowledgement模式
              String message="Message need to send";//模擬需要發送的消息

              Properties properties = new Properties();
              properties.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
              properties.put(Context.PROVIDER_URL, "t3://localhost:7001");

              try {
                Context context = new InitialContext(properties);
                Object obj = context.lookup(queueConnectionFactoryName);
                QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) obj;//JMS Connection Factory的獲得
               
                obj = context.lookup(queueName);
                Queue queue = (Queue) obj;//JMS Queue或者JMS Topic的獲得

                QueueConnection queueConnection=queueConnectionFactory.createQueueConnection();//產生連接
                queueConnection.start();
                QueueSession queueSession = queueConnection.createQueueSession(transacted, acknowledgementMode);
                TextMessage textMessage = queueSession.createTextMessage();
                textMessage.clearBody();
                textMessage.setText(message);
                QueueSender queueSender = queueSession.createSender(queue);
                queueSender.send(textMessage);
                if (transacted) {
                  queueSession.commit();
                }

                if (queueSender != null) {
                  queueSender.close();
                }
                if (queueSession != null) {
                  queueSession.close();
                }
                if (queueConnection != null) {
                  queueConnection.close();
                }

              }
              catch(Exception ex){
                ex.printStackTrace();
              }
            }
          }

          5、消息消費者從JMS接受消息的步驟:
          (1)使用JNDI查詢對象JMS ConnectionFactory和Destination(JMS Queue/Topic)
          (2)使用管理對象JMS ConnectionFactory建立連接Connection
          (3)使用連接Connection 建立會話Session
          (4)使用會話Session和管理對象Destination創建消息消費者MessageReceiver
          (5)使用消息消費者MessageReceiver接受消息,需要用setMessageListener將MessageListener接口綁定到MessageReceiver
          消息消費者必須實現了MessageListener接口,需要定義onMessage事件方法。
          一個消息消費者的例子:
          package myjms;

          import java.util.*;
          import javax.naming.*;
          import javax.jms.*;

          public class MessageReciever
              implements MessageListener {
            public void onMessage(Message message) {
              if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;
                try {
                  System.out.println("Message content is:" + textMessage.getText());
                }
                catch (JMSException e) {
                  e.printStackTrace();
                }
              }
            }

            public static void main(String[] args) {
             
              MessageReciever msgRcvr=new MessageReciever();
              String queueConnectionFactoryName = "myjmsconnectionfactory";
              String queueName = "myjmsqueue";

              boolean transacted = false;
              int acknowledgementMode = Session.AUTO_ACKNOWLEDGE;

              Properties properties = new Properties();
              properties.put(Context.INITIAL_CONTEXT_FACTORY,
                             "weblogic.jndi.WLInitialContextFactory");
              properties.put(Context.PROVIDER_URL, "t3://localhost:7001");

              try {
                Context context = new InitialContext(properties);
                Object obj = context.lookup(queueConnectionFactoryName);
                QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory)
                    obj;

                obj = context.lookup(queueName);
                Queue queue = (Queue) obj;

                QueueConnection queueConnection = queueConnectionFactory.
                    createQueueConnection();
                queueConnection.start();
                QueueSession queueSession = queueConnection.createQueueSession(transacted,
                    acknowledgementMode);
                QueueReceiver queueReceiver = queueSession.createReceiver(queue);

                queueReceiver.setMessageListener(msgRcvr);

                synchronized(msgRcvr){
                  msgRcvr.wait(100000);
                }

                if (queueReceiver != null) {
                  queueReceiver.close();
                }
                if (queueSession != null) {
                  queueSession.close();
                }
                if (queueConnection != null) {
                  queueConnection.close();
                }

              }
              catch (Exception ex) {
                ex.printStackTrace();
              }
            }
          }

          6、Message-driven Bean
          MDB實際上就是一個消息消費者的客戶端程序。它由AS EJB Container來管理。在JBUILDER生成一個MDB非常簡單。

          posted on 2007-05-06 11:34 張金鵬 閱讀(504) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 彭泽县| 巫溪县| 漾濞| 江口县| 哈密市| 海门市| 上犹县| 莆田市| 翼城县| 易门县| 衡阳市| 新营市| 大埔县| 江源县| 千阳县| 沂水县| 吴旗县| 青冈县| 赞皇县| 建阳市| 兴安县| 广河县| 五大连池市| 大厂| 鸡泽县| 拜泉县| 景德镇市| 万盛区| 新疆| 犍为县| 迭部县| 新平| 天祝| 阿克陶县| 秭归县| 济宁市| 睢宁县| 红桥区| 天柱县| 胶州市| 微博|