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

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

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

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    Apache ActiveMQ簡介: MQ是Apache出品的一個基于JMS消息處理機制的服務,可以很容易的潛入到Spring中,作為項目消息處理服務。

    Apache ActiveMQ用途: jms有兩種消息機制一種是消息隊列,一種是消息訂閱,簡單來說就是一對一,和一對多。

    一對一可以看做 一組消息對應一個 或 多個消息獲取服務,其中每一個單獨的消息體都只會被一個消息獲取服務獲取。

    一對多可以看做 一組消息對應一個 或 多個接收服務,其中每一個單獨的消息體發出之后都會被所有的接收服務收到一次。

    根據以上兩種模式我們可以在 發送短信的時候使用 消息隊列模式。也可以在分布式的時候使用消息隊列模式

    消息訂閱模式用的不是很多但是,在分布式中也可以應用同時可以結合WebService進行使用。例如一個新聞需要發給多個系統內的單獨服務。

    只要深刻理解了他的處理機制在很多情況下都可以應用,如果實在不喜歡這種方式也可以遵照java JMS的API用線程自己模擬消息隊列機制。

    我個人認為區別不是很大。更何況很多時候MQ的很多功能我們有沒有用到,用這么個大家伙就是為了圖省事。

    這里備注一下:按原有設定在創建連接的時候MQ是不發送消息的。

    下面我說以下使用方式:

    本人目前只會JAVA

    需要的包為

            activemq-all-5.2.0.jar
            log4j-1.2.14.jar
            spring-beans-2.5.5.jar
            spring-context-2.5.5.jar
            spring-jms-2.5.5.jar

             spring-core-2.5.5.jar

    這些應該就足夠了

    我做測試的時候用的包為

            activemq-all-5.2.0.jar
            commons-pool-1.4.jar
            log4j-1.2.14.jar
            spring-beans-2.5.5.jar
            spring-context-2.5.5.jar
            spring-core-2.5.5.jar
            spring-jms-2.5.5.jar
            spring-tx-2.5.5.jar
            spring-web-2.5.5.jar
            spring-webmvc-2.5.5.jar
            xbean-spring-3.4.jar
            msbase.jar
            mssqlserver.jar
            msutil.jar
            mysql-connector-java-5.0.4-bin.jar
            mysql.jar

     

    基本配置

    下載 Apache ActiveMQ 不知道的googlean

    安裝服務的文件在

    apache-activemq-5.5.0\bin\win32 目錄下面Linux版也一樣大同小異 運行.sh文件就好,如果出現問題請打開運行文件查看里面參數

    activemq.bat直接運行啟動服務

    InstallService.bat安裝成windos服務

    UninstallService.bat卸載windos服務

    安裝成功后

    在運行中 cmd

    netstat -an|find “61616” 查詢端口是否已經打開 

    D:\apache-activemq-5.5.0\conf\activemq.xml 本文件為服務配置文件

         <transportConnectors>
                <transportConnector name="openwire" uri="tcp://0.0.0.0:61618"/>
            </transportConnectors>

    這一項為端口設置

    默認為 “61616”

    目前以windos為例

    把spring和項目聯系起來

    第一步為web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!-- 配置Spring-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/classes/NewFileMQ.xml
            </param-value>
        </context-param>
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>


      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
        
    </web-app>

    先說 一下消息隊列(也就是一對一)

    NewFileMQ.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:amq="http://activemq.apache.org/schema/core"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
      http://activemq.apache.org/schema/core 
      http://activemq.apache.org/schema/core/activemq-core.xsd">

      <!-- 配置JMS鏈接模版 -->  
                <bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">  
                        <property name="brokerURL" value="tcp://localhost:61618"/>  
                </bean>  
          
                <!-- 配置JMS模版 -->  
                <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
                        <property name="connectionFactory" ref="connectionFactory"/>  
            <property name="pubSubDomain" value="false" />  
            <property name="explicitQosEnabled" value="true" /> <!-- deliveryMode, priority, timeToLive 的開關,要生效,必須配置為true,默認false-->  
            <property name="deliveryMode" value="1" /> <!-- 發送模式  DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久-->  
                        
                </bean>  
          

                <!-- 發送消息的目的地(一個隊列) -->
                <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">  
                        <!-- 設置消息隊列的名字 -->
                        <constructor-arg index="0" value="HelloJmsQueue"/>  
                </bean>    

        <bean id="sender" class="message.Sender">
            <property name="jmsTemplate" ref="jmsTemplate"></property>
        </bean>
    <!--消息獲取類-->
        <bean id="receive" class="message.Receiver"></bean>
        <!--給消息獲取類加個監聽讓他能自動獲取消息-->
        <bean id="listenerContainer"
            class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="connectionFactory"></property>
            <property name="destination" ref="destination"></property>
            <property name="messageListener" ref="receive"></property>
        </bean>
    </beans>

    發送消息的類

    package message;

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

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;


    public class Sender {

        private JmsTemplate jmsTemplate;

        public void setJmsTemplate(JmsTemplate jmsTemplate) {
            this.jmsTemplate = jmsTemplate;
        }
        
        public void send(final String text){
            System.out.println("---Send:"+text);
            jmsTemplate.send(new MessageCreator(){

                public Message createMessage(Session arg0) throws JMSException {
                    // TODO Auto-generated method stub
                    return arg0.createTextMessage(text);
                }
                
            });
        }
        
        public static void main(String[] args) {  
            ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");  
            JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");  
            Destination destination = (Destination) ctx.getBean("destination");  
    for(int i=0;i<10;i++){
        final String dd = i+"";
    //jmsTemplate.convertAndSend(destination,"發送消息: ActiveMQ Text Message!"+dd);
            template.send(destination, new MessageCreator() {  
                    public Message createMessage(Session session) throws JMSException {  
                            return session.createTextMessage("發送消息: ActiveMQ Text Message!"+dd);  
                    }  
            });  
    }
            System.out.println("成功發送了一條JMS消息");  
    }  
    }
    接收消息類

    package message;

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

    import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
    import org.springframework.context.ApplicationContext;
    import org.springframework.jms.core.JmsTemplate;


    public class Receiver implements MessageListener {
    //接聽接收
        public void onMessage(Message message) {
            if (message instanceof TextMessage) {
                TextMessage text = (TextMessage) message;

                try {
                    System.out.println("Receive:第四個接收者" + text.getText());
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }
        //手動接收
           public static void main(String[] args) throws JMSException {  
               ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");  
               JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");  
               Destination destination = (Destination) ctx.getBean("destination");  
               while (true) {  
                       TextMessage txtmsg = (TextMessage) template.receive(destination);  
                       if (null != txtmsg)  
                               System.out.println("收到消息內容為: " + txtmsg.getText());  
                       else  
                               break;  
               }  
       }  
    }

    發布者模式

    其實兩種模式其它設置基本相同

    唯一不用的就是 Spring配置文件中把一下這段替換一下就可以了

                <!-- 發送消息的目的地(一個隊列) -->
                <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">  
                        <!-- 設置消息隊列的名字 -->
                        <constructor-arg index="0" value="HelloJmsTopic"/>  
                </bean>    

     








    http://hi.baidu.com/wu_chao/blog/item/1d9aa2772e663107b051b9cc.html 

    posted on 2012-08-26 20:18 abin 閱讀(3371) 評論(1)  編輯  收藏 所屬分類: ActiveMQ

    Feedback

    # re: Apache ActiveMQ or Spring 使用方法[未登錄] 2015-07-06 17:51 32
    第三方斯蒂芬  回復  更多評論
      

    主站蜘蛛池模板: 亚洲精品亚洲人成在线麻豆| 国产亚洲精品美女久久久久| 久久精品网站免费观看| 国产亚洲精品欧洲在线观看| 亚洲AV无码精品色午夜果冻不卡| 114一级毛片免费| 春意影院午夜爽爽爽免费| 亚洲视频手机在线| 免费一级毛片免费播放| 四虎影视成人永久免费观看视频| 久久久久精品国产亚洲AV无码| 亚洲国产av一区二区三区| 亚洲最大免费视频网| 男女啪啪免费体验区| 亚洲欧洲校园自拍都市| 亚洲?V无码成人精品区日韩| **俄罗斯毛片免费| 亚洲精品偷拍视频免费观看| 国产精品亚洲精品观看不卡| 亚洲综合色婷婷七月丁香| 午夜成人免费视频| 曰批全过程免费视频播放网站 | 日韩精品在线免费观看| 日韩亚洲人成在线| 亚洲短视频男人的影院| 少妇亚洲免费精品| 午夜成人免费视频| 91免费在线播放| 精品亚洲永久免费精品| 免费中文字幕视频| 亚洲av第一网站久章草| 亚洲成电影在线观看青青| 精品亚洲综合久久中文字幕| 四虎影视永久免费观看地址| 久久国内免费视频| 99国产精品视频免费观看| 亚洲免费日韩无码系列| 免费无码一区二区| 美女视频免费看一区二区| 亚洲熟女精品中文字幕| 亚洲成aⅴ人在线观看|