<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)

    隨筆分類

    隨筆檔案

    最新評論

    閱讀排行榜

    評論排行榜

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

    主要的幾個對象:ConnectionFactory、Connection、Destination、Session、MessageProducer、MessageConsumer
    其相互關系如下圖:

    1.PTP:
    簡單回顧7個對象:QueueConnectionFactory、QuequeConnection、Queue、QueueSession、QueueSender、QueueReceiver、QueueBrowser
        1) Sender
        try {
            //具體怎么得到就不寫了,各個系統肯定都不一樣,但終究都是通過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為要傳輸的對象
            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.主動接收,synchronously
            try {
                QueueReceiver receiver = session.createReceiver(queue);
                receiver.receiveNoWait();
                /**
                QueueBrowser browser = session.createBrowser(queue); //QueueBrowser只會取消息,但不會取走消息
                Enumeration elements = browser.getEnumeration();
                while(elements.hasMoreElements) {
                    Message message = elements.nextElement();
                    ...
                }
                */
            } catch (JMSException e) {
                ...
            }

            b.消息偵聽,也是最主要的應用,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個對象:TopicConnectionFactory、TopicConnection、Topic、TopicSession、TopicPublisher、TopicSubscriber
        1) Publisher
        try {
            //具體怎么得到就不寫了,各個系統肯定都不一樣,但終究都是通過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表示不使用事務
            Message objMessage = session.createObjectMessage();
            objMessage.setObject((Serializable)obj); //obj為要傳輸的對象
            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.主動接收,比如上面發送完后,接收回應消息,相當于同步接收了
            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); //關鍵在于這個listener
                connection.start();
            } catch (JMSException e) {
                ...
            }

            MyListener實現同上


    posted on 2008-08-03 18:04 EvanLiu 閱讀(932) 評論(0)  編輯  收藏 所屬分類: Java基礎
    主站蜘蛛池模板: 在线观看亚洲免费视频| 亚洲性猛交xx乱| 一级女性全黄久久生活片免费 | 亚洲一区二区三区高清不卡| 中文字幕免费在线| 亚洲国产综合专区电影在线| 在线成人精品国产区免费| 亚洲日产无码中文字幕| 精品国产呦系列在线观看免费| 国产AⅤ无码专区亚洲AV| 中国人免费观看高清在线观看二区 | 亚洲av区一区二区三| eeuss免费天堂影院| 亚洲无人区一区二区三区| 毛片免费在线观看| 亚洲高清不卡视频| 无码少妇一区二区浪潮免费| 亚洲av最新在线观看网址| 亚洲日韩人妻第一页| 久久精品乱子伦免费| 亚洲一区二区三区四区视频| 日韩在线天堂免费观看| 一级特黄色毛片免费看| 亚洲av无码乱码国产精品fc2| 在线精品一卡乱码免费| 精品久久久久久亚洲中文字幕| 国产亚洲成归v人片在线观看| 一级毛片成人免费看免费不卡| 国产成人精品亚洲2020| 亚洲乱亚洲乱少妇无码| 久久ww精品w免费人成| 亚洲国产精品无码久久| 亚洲人成亚洲人成在线观看| 亚洲w码欧洲s码免费| 黄色三级三级三级免费看| 亚洲av色影在线| 国产男女猛烈无遮挡免费视频网站| A国产一区二区免费入口| 77777亚洲午夜久久多喷| 久久亚洲欧洲国产综合| 在线观看免费人成视频|