李順利
          隨筆-50  評論-170  文章-0  trackbacks-0

          本篇文章沒有做過多整理,是以前自己寫的一個小筆記,希望有緣的你讀過有些收獲

          1). weblogic 配置 JMS步驟 
          1.1 創(chuàng)建 JMS 服務器 
          1.2 創(chuàng)建持久性存儲 
          1.3 創(chuàng)建 JMS 模塊


          下圖來自于Weblogic成功配置JMS后的截圖,具體的配置過程網上很多,請參考完成。 

          2). Spring 配置 applicationContext.xml

          applicationContext.xml
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          
          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans" xmlns:jee="http://www.springframework.org/schema/jee" 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://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
          
              <!-- Use Weblogic JMS -->
              <jee:jndi-lookup id="batch.jmsFactory" jndi-name="jms/batch/connectionFactory">
                 <jee:environment>
                     java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
                     java.naming.provider.url=t3://127.0.0.1:7001
                 </jee:environment>
              </jee:jndi-lookup>
              <jee:jndi-lookup id="batch.reqQueue.destination" jndi-name="jms/batch/reqQueue">
                 <jee:environment>
                     java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
                     java.naming.provider.url=t3://127.0.0.1:7001
                 </jee:environment>
              </jee:jndi-lookup>
          
              <!-- JmsTemplate -->
              <bean id="jmsBatchQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
                 <property name="pubSubDomain" value="false" />
                 <property name="connectionFactory" ref="batch.jmsFactory" />
                 <property name="defaultDestination" ref="batch.reqQueue.destination" />
              </bean>
          
              <bean id="batchSenderAndReceiver" class="org.usc.jms.SenderAndReceiver">
                 <property name="jmsTemplate" ref="jmsBatchQueueTemplate" />
              </bean>
          
              <bean id="batchReceiverQueueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
                 <property name="concurrentConsumers" value="1" />
                 <property name="connectionFactory" ref="batch.jmsFactory" />
                 <property name="destination" ref="batch.reqQueue.destination" />
                 <property name="messageListener" ref="batchSenderAndReceiver" />
              </bean>
          
          </beans>
          

          3). 測試代碼

          SenderAndReceiver.java
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          
          package org.usc.jms;
          
          import javax.jms.JMSException;
          import javax.jms.Message;
          import javax.jms.MessageListener;
          import javax.jms.TextMessage;
          
          import org.springframework.jms.core.JmsTemplate;
          
          /**
           *
           * @author ShunLi
           */
          public class SenderAndReceiver implements MessageListener{
              private JmsTemplate jmsTemplate;
          
              public JmsTemplate getJmsTemplate() {
                 return jmsTemplate;
              }
          
              public void setJmsTemplate(JmsTemplate jmsTemplate) {
                 this.jmsTemplate = jmsTemplate;
              }
          
              public void sendMessage() {
                 jmsTemplate.convertAndSend("Hello world!(" + System.currentTimeMillis() + ")");
              }
          
              public void onMessage(Message msg) {
                 try {
                     System.out.println("msg is "+((TextMessage)msg).getText());
                 } catch (JMSException e) {
                     e.printStackTrace();
                 }
              }
          }
          
          
              public static void main(String[] args) {
                 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
                 SenderAndReceiver jmsQueueTemplate = (SenderAndReceiver) ctx.getBean("batchSenderAndReceiver");
                 jmsQueueTemplate.sendMessage();
              }
          

          4). 注意點 
          4.1. java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory 需要在classpath 下面加上 weblogic.jar 
          4.2. SenderAndReceiver 即是Sender 又是 Listener(Recevier) 
          4.3. 大致處理流程是這樣的

          Sender send msg -> Queue/Topic -> 觸發(fā)Listener(異步),Listener onMessage 處理 收到的 Message。   
          

          p.s. 測試代碼不太優(yōu)美,SenderAndReceiver 既作為了一個消息發(fā)布者,又作為了消息接收者,實踐中,盡量分開

          5). 補充知識 
          傳遞域:點對點(PTP)消息傳遞域和發(fā)布/訂閱消息傳遞域。 
          點對點消息傳遞域的特點如下:

          每個消息只能有一個消費者。
          消息的生產者和消費者之間沒有時間上的相關性。無論消費者在生產者發(fā)送消息的時候是否處于運行狀態(tài),它都可以提取消息。
          

          發(fā)布/訂閱消息傳遞域的特點如下:

          每個消息可以有多個消費者。
          生產者和消費者之間有時間上的相關性。訂閱一個主題的消費者只能消費自它訂閱之后發(fā)布的消息。
          

          JMS規(guī)范允許客戶創(chuàng)建持久訂閱,這在一定程度上放松了時間上的相關性要求。持久訂閱允許消費者消費它在未處于激活狀態(tài)時發(fā)送的消息。



          博客中的一些下載已經放到了百度云了,請根據需要下載。【點我去百度云下載】

          最后弱弱地說一下,如果可以的話,轉載請?zhí)峁┏鎏? http://www.aygfsteel.com/lishunli/archive/2012/12/16/393058.html),謝謝。
          posted on 2012-12-16 14:28 李順利 閱讀(1882) 評論(0)  編輯  收藏 所屬分類: Tips

          博客中的一些下載已經放到了百度云了,請根據需要下載。
          點我去百度云下載

           


          常用鏈接

          留言簿(3)

          隨筆分類(10)

          隨筆檔案(49)

          文章分類

          順利推薦

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 305066
          • 排名 - 191

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 秦安县| 赤城县| 安庆市| 察雅县| 壶关县| 沧州市| 东城区| 六枝特区| 龙岩市| 抚宁县| 大方县| 仙居县| 花垣县| 景东| 武功县| 临夏县| 洪洞县| 沧州市| 九台市| 康平县| 郯城县| 杨浦区| 呼伦贝尔市| 聂拉木县| 石阡县| 咸丰县| 东宁县| 齐齐哈尔市| 满城县| 高要市| 都昌县| 尖扎县| 漳平市| 刚察县| 内黄县| 务川| 永定县| 前郭尔| 广饶县| 南岸区| 新乐市|