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

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

          1). weblogic 配置 JMS步驟 
          1.1 創建 JMS 服務器 
          1.2 創建持久性存儲 
          1.3 創建 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 -> 觸發Listener(異步),Listener onMessage 處理 收到的 Message。   
          

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

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

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

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

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

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



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

          最后弱弱地說一下,如果可以的話,轉載請提供出處( ),謝謝。
          posted on 2012-12-16 14:28 李順利 閱讀(1890) 評論(0)  編輯  收藏 所屬分類: Tips
          主站蜘蛛池模板: 海门市| 那坡县| 霍山县| 屏山县| 建阳市| 莱西市| 孝感市| 平顶山市| 孝义市| 日照市| 体育| 英德市| 饶平县| 洛南县| 五台县| 神池县| 定远县| 诸暨市| 辰溪县| 霍邱县| 北安市| 龙井市| 德惠市| 教育| 安塞县| 天等县| 东丽区| 玛沁县| 克拉玛依市| 台东市| 汝州市| 大城县| 来凤县| 锡林浩特市| 博客| 利辛县| 个旧市| 军事| 兰溪市| 常山县| 松溪县|