<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基礎
    主站蜘蛛池模板: 粉色视频成年免费人15次| 亚洲六月丁香六月婷婷色伊人| 国产亚洲精品AAAA片APP| 国产三级在线观看免费| 亚洲最大的黄色网| 毛片a级毛片免费观看免下载| 亚洲一区二区三区在线| 成人免费无码大片A毛片抽搐| 亚洲欧美黑人猛交群| 国产在线观看免费不卡| 污视频网站在线观看免费| 亚洲综合激情另类专区| 99精品视频免费| 久久狠狠高潮亚洲精品| 国产精品免费精品自在线观看| www.亚洲日本| www.亚洲精品| 久9这里精品免费视频| ass亚洲**毛茸茸pics| 在线播放高清国语自产拍免费 | 免费精品国产自产拍在线观看| www.91亚洲| a级日本高清免费看| 亚洲的天堂av无码| 免费无码看av的网站| 一级做α爱过程免费视频| 亚洲AV综合色区无码另类小说| **真实毛片免费观看| 亚洲色少妇熟女11p| 免费一级毛片清高播放| 免费91最新地址永久入口| 亚洲国产综合精品中文第一| 亚洲精品国产日韩无码AV永久免费网| 男人的天堂网免费网站| 亚洲入口无毒网址你懂的| 亚洲精品成人久久久| 99久热只有精品视频免费看| 亚洲av第一网站久章草| 久久国产精品亚洲一区二区| 日韩在线免费电影| 久久永久免费人妻精品|