<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ǔ)
    主站蜘蛛池模板: 久久国产精品萌白酱免费| 亚洲国产精品久久久久网站| 成人免费福利视频| 日韩毛片在线免费观看| 亚洲最大的成人网| 亚洲黄色在线观看网站| 中文字幕第一页亚洲| 高清国语自产拍免费视频国产 | 日韩插啊免费视频在线观看| 狠狠热精品免费观看| 亚洲熟妇无码一区二区三区| 亚洲视频国产精品| 亚洲国产精品成人久久 | 色婷婷综合缴情综免费观看| 亚洲AV色吊丝无码| 亚洲精品国产成人中文| 国产av天堂亚洲国产av天堂| 国产精品亚洲玖玖玖在线观看| 午夜色a大片在线观看免费| 国产精品久久久久免费a∨| 最近中文字幕完整免费视频ww| 三级黄色免费观看| 亚洲一级片免费看| 亚美影视免费在线观看| 美女羞羞喷液视频免费| 黄色片网站在线免费观看| 国产精品亚洲一区二区三区在线观看| 99热亚洲色精品国产88| 亚洲av片不卡无码久久| 亚洲自国产拍揄拍| 亚洲av片不卡无码久久| 一本色道久久88—综合亚洲精品 | 亚洲免费网站在线观看| 日韩午夜理论免费TV影院| 最近中文字幕大全中文字幕免费| 99热在线免费观看| 亚洲免费在线观看视频| 人成午夜免费视频在线观看| 免费可以看黄的视频s色| 野花高清在线观看免费3中文| 成人片黄网站A毛片免费|