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

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

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

    當柳上原的風吹向天際的時候...

    真正的快樂來源于創(chuàng)造

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
    相對于Weblogic這種大家伙來說,在ActiveMQ5.3.0上建立隊列和主題還是相對容易的,當然如果路沒走對也要費一番周折,本人在此寫出小文,希望能對ActiveMQ初學者有所裨益,順便感謝網(wǎng)絡上那些辛勤的有共享精神的ActiveMQ研究者和鄙視一下那些懶惰的有剽竊習慣的轉載者。

    一.下載安裝ActiveMQ
    http://activemq.apache.org/ 你可以得到ActiveMQ的最新版本,本人下載的是win版本,下載到本地后解壓到一個目錄(以后簡稱ActiveMQ解壓目錄)就算安裝完畢了,確實很簡單。

    二.啟動ActiveMQ。
    啟動它也很容易,找到ActiveMQ解壓目錄下的bin目錄,雙擊activemq.bat就可以了,如果嫌麻煩可以做成一個批處理文件,然后讓計劃任務自動調(diào)用它。activemq.bat啟動后會出現(xiàn)一個命令行窗口,這意味著broker已經(jīng)準備就緒了。

    三.創(chuàng)建隊列和主題
    ActiveMQ啟動后,我們可以就使用 http://localhost:8161/admin 進入ActiveMQ的消息管理后臺系統(tǒng),如下圖:

    在這個頁面中有一排橫向菜單,如果你需要創(chuàng)建隊列Queue,點擊Queues菜單,輸入你想要的隊列的名稱,再點擊Create按鈕,隊列即被創(chuàng)建好了;主題也很類似,你點擊Topics菜單,輸入你想要的主題的名稱,再點擊create按鈕,主題也就建立好了。確實是非常快捷方便。本人建立了隊列DealQueue和主題BuyTopic,用于下面的程序。

    四.利用隊列和主題收發(fā)消息
    有了Spring的幫助,JMS處理能省卻很多功夫,我們只需要進行對應的配置即可,下面是通過隊列DealQueue和主題BuyTopic收發(fā)消息的配置和消息發(fā)送器監(jiān)聽器源代碼,大家可以參考,另外也可以從這 這里(注意為了減小體積,包都被刪除了,請到ActiveMQ安裝目錄的lib尋找相應的包載入,其它通用包請自行尋找)    下載源碼查看。

    Spring上下文配置文件bean.xml,這里文件里配置的有連接工廠,jms模板,目的地,消息發(fā)送者和接受者等。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>
        
    <!-- 連接工廠 -->
        
    <bean id="connectionFactory"
            class
    ="org.apache.activemq.ActiveMQConnectionFactory">
            
    <property name="brokerURL">
                
    <value>tcp://192.168.0.1:61616</value>
            
    </property>

        
    </bean>

        
    <!-- JMS模板 -->
        
    <bean id="jmsTemplate"
            class
    ="org.springframework.jms.core.JmsTemplate">
            
    <property name="connectionFactory">
                
    <ref bean="connectionFactory" />
            
    </property>
        
    </bean>

        
    <!-- **************************** -->
        
    <!--     以下是隊列DealQueue的配置   -->
        
    <!-- **************************** -->
        
    <!-- 在ActiveMQ上配置的隊列DealQueue -->
        
    <bean id="dest4DealQueue"
            class
    ="org.apache.activemq.command.ActiveMQQueue">
            
    <constructor-arg index="0">
                
    <value>DealQueue</value>
            
    </constructor-arg>
        
    </bean>
        
        
    <!-- JMS 消息發(fā)送者 ,用于給DealQueue發(fā)送消息 -->
        
    <bean id="jmsSender4DealQueue"
            class
    ="com.heyang.sender.JmsSender">
            
    <property name="jmsTemplate" ref="jmsTemplate" />
            
    <property name="destination" ref="dest4DealQueue" />
        
    </bean> 
        
        
    <!-- JMS 消息監(jiān)聽容器,Spring容器啟動后自行監(jiān)聽DealQueue,有消息后會交給dealQueueListener處理 -->
        
    <bean id="listenerContainer4DealQueue"
            class
    ="org.springframework.jms.listener.DefaultMessageListenerContainer">        
            
    <property name="connectionFactory" ref="connectionFactory" />
            
    <property name="concurrentConsumers" value="1" />
            
    <property name="destination" ref="dest4DealQueue" />
            
    <property name="messageListener" ref="dealQueueListener" />
        
    </bean>
        
        
    <!-- MDP:用于接收DealQueue上的消息 -->
        
    <bean id="dealQueueListener" class="com.heyang.listener.DealQueueListener" />
        
        
    <!-- **************************** -->
        
    <!--     以下是主題BuyTopic的配置   -->
        
    <!-- **************************** -->
        
    <!-- 在ActiveMQ上配置的主題 -->
        
    <bean id="dest4BuyTopic"
            class
    ="org.apache.activemq.command.ActiveMQTopic">
            
    <constructor-arg index="0">
                
    <value>BuyTopic</value>
            
    </constructor-arg>
        
    </bean>
        
        
    <!-- JMS 消息發(fā)送者 ,用于給BuyTopic發(fā)送消息 -->
        
    <bean id="jmsSender4BuyTopic"
            class
    ="com.heyang.sender.JmsSender">
            
    <property name="jmsTemplate" ref="jmsTemplate" />
            
    <property name="destination" ref="dest4BuyTopic" />
        
    </bean> 
        
        
    <!-- JMS 消息監(jiān)聽容器,Spring容器啟動后自行監(jiān)聽BuyTopic,有消息后會交給buyTopicListener處理 -->
        
    <bean id="listenerContainer4BuyTopic"
            class
    ="org.springframework.jms.listener.DefaultMessageListenerContainer">        
            
    <property name="connectionFactory" ref="connectionFactory" />
            
    <property name="concurrentConsumers" value="1" />
            
    <property name="destination" ref="dest4BuyTopic" />
            
    <property name="messageListener" ref="buyTopicListener" />
        
    </bean>
        
        
    <!-- MDP:用于接收BuyTopic上的消息 -->
        
    <bean id="buyTopicListener" class="com.heyang.listener.BuyTopicListener" />
    </beans>


    三個對應的類
    1.JMS消息發(fā)送者
    package com.heyang.sender;

    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Session;

    import org.apache.activemq.Message;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;

    /**
     * 此類用發(fā)送消息
     * 
    @author 何楊
     * @date 2009-10-15
     * @time 上午07:44:15
     
    */

    public class JmsSender {

        
    // JMS模板    
        private JmsTemplate jmsTemplate;

        
    // 目的地
        private Destination destination;

        
    public void send(final String msg) {
            jmsTemplate.send(destination, 
    new MessageCreator() {
                
    public Message createMessage(Session session) throws JMSException {
                    
    return (Message) session.createTextMessage(msg);
                }

            }
    );
        }


        
    public JmsTemplate getJmsTemplate() {
            
    return jmsTemplate;
        }


        
    public void setJmsTemplate(JmsTemplate jmsTemplate) {
            
    this.jmsTemplate = jmsTemplate;
        }


        
    public Destination getDestination() {
            
    return destination;
        }


        
    public void setDestination(Destination destination) {
            
    this.destination = destination;
        }

    }

    JMS消息監(jiān)聽者,用于監(jiān)聽BuyTopic:
    package com.heyang.listener;

    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;

    import org.apache.log4j.Logger;

    /**
     * JMS消息監(jiān)聽者,用于監(jiān)聽BuyTopic。
     * 
     * 
    @author 何楊
     * @date 2009-10-13
     * @time 下午04:10:33
     
    */

    public class BuyTopicListener implements MessageListener {
        
    public static Logger logger = Logger.getLogger(DealQueueListener.class);
        
        
    public void onMessage(Message message) {
            
    if (message instanceof TextMessage) {            
               
                
    // 消息轉化
                String msg="";
                
    try{
                    msg
    =((TextMessage) message).getText();
                    System.out.println(
    "從BuyTopic收到消息:"+msg);
                }
     catch (Exception ex) {
                    logger.error(ex);
                    ex.printStackTrace();
                    
    return;
                }

            }

        }

    }


    JMS消息監(jiān)聽者,用于監(jiān)聽DealQueue
    package com.heyang.listener;

    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;

    import org.apache.log4j.Logger;

    /**
     * JMS消息監(jiān)聽者,用于監(jiān)聽DealQueue。
     * 
     * 
    @author 何楊
     * @date 2009-10-13
     * @time 下午04:10:33
     
    */

    public class DealQueueListener implements MessageListener {
        
    public static Logger logger = Logger.getLogger(DealQueueListener.class);
        
        
    public void onMessage(Message message) {
            
    if (message instanceof TextMessage) {            
               
                
    // 消息轉化
                String msg="";
                
    try{
                    msg
    =((TextMessage) message).getText();
                    System.out.println(
    "從DealQueue收到消息:"+msg);
                }
     catch (Exception ex) {
                    logger.error(ex);
                    ex.printStackTrace();
                    
    return;
                }

            }

        }

    }

        

    用戶可以使用Test.java中的語句來測試一下效果。另外有一點想贅述一下,上述兩個消息監(jiān)聽者是受Spring容器控制的,它們之所以能成為Message Diven Pojo是因為Spring容器自啟動開始就對目標進行輪詢,如果發(fā)現(xiàn)有消息就通知指定消息監(jiān)聽者響應,這樣消息監(jiān)聽者的onMessage函數(shù)就會被調(diào)用,其背后的調(diào)用者即上面配置文件中的listenerContainer4DealQueue和listenerContainer4BuyTopic,我們雖沒有直接使用它們但它們從Spring上下文啟動伊始就一直開始工作了,從log4j的輸出就能看出這一點,當然為了消除輪詢輸出的消極影響,你可以調(diào)高log4j的輸出級別。

    但愿此文能對你有所幫助,全文完。
    posted on 2009-10-27 09:00 何楊 閱讀(4136) 評論(0)  編輯  收藏
    主站蜘蛛池模板: 亚洲人成网亚洲欧洲无码久久| A毛片毛片看免费| 精品亚洲麻豆1区2区3区| 在线免费观看国产视频| 亚洲免费视频观看| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 午夜无遮挡羞羞漫画免费| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 亚洲成年网站在线观看| 91亚洲导航深夜福利| 亚洲日本va在线视频观看| 免费中文字幕不卡视频| 在线观看亚洲免费视频| 日韩免费一区二区三区在线| 国产日韩AV免费无码一区二区| 狠狠热精品免费观看| 在线观看免费亚洲| 亚洲精品女同中文字幕| 亚洲www在线观看| 亚洲午夜精品国产电影在线观看| 亚洲色中文字幕无码AV| 中文字幕亚洲不卡在线亚瑟| 又粗又大又猛又爽免费视频| 日韩a级毛片免费观看| 免费观看的av毛片的网站| 最近免费中文字幕大全| 永久免费av无码不卡在线观看| 16女性下面无遮挡免费| 1000部啪啪毛片免费看| 最近免费中文字幕大全免费| 日韩插啊免费视频在线观看| 日韩精品内射视频免费观看| 午夜精品射精入后重之免费观看 | 亚洲国产精品成人精品小说| 亚洲AV无码专区在线播放中文| 区久久AAA片69亚洲| 亚洲夜夜欢A∨一区二区三区| 亚洲午夜国产片在线观看| 亚洲人成影院在线观看| 亚洲精品高清无码视频| 亚洲精品~无码抽插|