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

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

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

    隨筆 - 37  文章 - 29  trackbacks - 0


    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    如前所述,JMS分兩大類:PTP和Pub/Sub

    主要的幾個(gè)對(duì)象:ConnectionFactory、Connection、Destination、Session、MessageProducer、MessageConsumer
    其相互關(guān)系如下圖:

    1.PTP:
    簡單回顧7個(gè)對(duì)象:QueueConnectionFactory、QuequeConnection、Queue、QueueSession、QueueSender、QueueReceiver、QueueBrowser
        1) Sender
        try {
            //具體怎么得到就不寫了,各個(gè)系統(tǒng)肯定都不一樣,但終究都是通過jdni來獲得
            Context jndiContext = new InitialContext();
            QueueConnectionFactory factory = jndiContext.lookup("**Factory");
            Queue queue = jndiContext.lookup("**Queue");
            QueueConnection connection = factory.createQueueConnection();
            boolean transaction = true;
            QueueSession session = connection.createQueueSession(transaction , Session.AUTO_ACKNOWLEDGE);
            Message objMessage = session.createObjectMessage();  //或session.createTextMessage("...");
            objMessage.setObject((Serializable)obj); //obj為要傳輸?shù)膶?duì)象
            QueueSender sender = session.createSender(queue);
            publisher.setTimeToLive(timeout); //long timeout = ...
            connection.start();
            sender.send(objMessage);
            //or
            /**
            sender = session.createSender(null);
            sender.send(queue, message);
            */
            //如果不用了,就收拾干凈
            publisher.close();
            session.close();
            connection.close();
        } catch (JMSException e) {
            //TODO
        } finally {
            publisher = null;
            session = null;
            connection = null;
        }

        2) Receiver/Browser
            a.主動(dòng)接收,synchronously
            try {
                QueueReceiver receiver = session.createReceiver(queue);
                receiver.receiveNoWait();
                /**
                QueueBrowser browser = session.createBrowser(queue); //QueueBrowser只會(huì)取消息,但不會(huì)取走消息
                Enumeration elements = browser.getEnumeration();
                while(elements.hasMoreElements) {
                    Message message = elements.nextElement();
                    ...
                }
                */
            } catch (JMSException e) {
                ...
            }

            b.消息偵聽,也是最主要的應(yīng)用,asynchronously
            try {
                MessageListener myListener = new MyListener();
                QueueReceiver receiver = session.createReceiver(queue);
                receiver.setMessageListener(myListener);
                connection.start();
            } catch (JMSException e) {
                ...    
            }

            public class MyListener impelments MessageListner {
                public void onMessage(Message message) {
                    if(message instanceof TextMessage) {
                        ...
                    } else if (message instanceof ObjectMessage) {
                        ...
                    } else {
                        ...
                    }    
                }
            }


    2.Pub/Sub:
    簡單回顧6個(gè)對(duì)象:TopicConnectionFactory、TopicConnection、Topic、TopicSession、TopicPublisher、TopicSubscriber
        1) Publisher
        try {
            //具體怎么得到就不寫了,各個(gè)系統(tǒng)肯定都不一樣,但終究都是通過jdni來獲得
            Context jndiContext = new InitialContext();
            TopicConnectionFactory factory = jndiContext.lookup("**Factory");
            Topic topic = jndiContext.lookup("**Topic");
            TopicConnection connection = factory.createTopicConnection();
            TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);  //false表示不使用事務(wù)
            Message objMessage = session.createObjectMessage();
            objMessage.setObject((Serializable)obj); //obj為要傳輸?shù)膶?duì)象
            TopicPublisher publisher = session.createPublisher(topic);
            publisher.setTimeToLive(100000);
            connection.start();
            publisher.publish(message);
            //or
            /**
            publisher = session.createPublisher(null);
            publiser.publish(topic, message);
            */
            publisher.close();
            session.close();
            connection.close();
        } catch (JMSException e) {
            //TODO
        }


        2) Subscriber
            a.主動(dòng)接收,比如上面發(fā)送完后,接收回應(yīng)消息,相當(dāng)于同步接收了
            try {
                TopicSubscriber subscriber = session.createSubScriber(topic);
                message = subscriber.receiver(timeout); //long timeout = ...
                subscriber.close();
            } catch (JMSException e) {
                ...    
            }


            b.消息偵聽,asynchronously
            try {
                ...
                TopicSubscriber subscriber = session.createSubScriber(topic);
                MessageListener listener = new MyListener();
                subscriber.setMessageListener(listener); //關(guān)鍵在于這個(gè)listener
                connection.start();
            } catch (JMSException e) {
                ...
            }

            MyListener實(shí)現(xiàn)同上


    posted on 2008-08-03 18:04 EvanLiu 閱讀(932) 評(píng)論(0)  編輯  收藏 所屬分類: Java基礎(chǔ)
    主站蜘蛛池模板: 免费看少妇作爱视频| 日本妇人成熟免费中文字幕| 国产免费69成人精品视频| 国产精品高清视亚洲精品| www.999精品视频观看免费| 亚洲一区精品视频在线| 中文字幕无码免费久久99| 亚洲伊人久久大香线蕉在观 | 久久免费香蕉视频| 亚洲日本va在线视频观看| 一个人免费视频在线观看www| 久久精品国产亚洲5555| 成人爽a毛片免费| 中文字幕在线观看亚洲| 九九九精品成人免费视频| 亚洲精品无码成人片久久不卡| 在线观看免费亚洲| www永久免费视频| 亚洲国产精品久久久久婷婷软件| 五月婷婷在线免费观看| 亚洲精品av无码喷奶水糖心| 亚洲成?Ⅴ人在线观看无码| 成人精品视频99在线观看免费| 亚洲宅男永久在线| 妞干网在线免费视频| 搜日本一区二区三区免费高清视频| 亚洲欭美日韩颜射在线二| 18禁美女裸体免费网站| 亚洲精华国产精华精华液| 久久久久国产成人精品亚洲午夜| 99免费观看视频| 自拍偷自拍亚洲精品偷一| 亚洲精品乱码久久久久久| 成人免费观看一区二区| 无人视频在线观看免费播放影院| 国产亚洲美女精品久久久久狼| 九九精品免费视频| 久久久精品国产亚洲成人满18免费网站| 亚洲福利视频一区| 四虎永久在线精品免费影视 | 国产大片免费天天看|