少年阿賓

          那些青春的歲月

            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
          第三方斯蒂芬  回復  更多評論
            

          主站蜘蛛池模板: 北流市| 德州市| 邳州市| 清远市| 盈江县| 沈丘县| 商洛市| 临沭县| 革吉县| 绥化市| 确山县| 洪江市| 门头沟区| 莱州市| 城固县| 东海县| 江门市| 雷波县| 西乡县| 麻栗坡县| 彭阳县| 博乐市| 绥江县| 阳江市| 屏山县| 内乡县| 绥中县| 柯坪县| 汉中市| 武穴市| 洪泽县| 通江县| 乐安县| 韩城市| 永泰县| 安顺市| 吉木乃县| 丽水市| 安乡县| 八宿县| 兴隆县|