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

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

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


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

          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ā)布/訂閱消息傳遞域。 
          點對點消息傳遞域的特點如下:

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

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

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

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



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

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

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 寿宁县| 神农架林区| 开鲁县| 仁怀市| 永兴县| 通州市| 化德县| 南川市| 金山区| 喜德县| 法库县| 简阳市| 城步| 廊坊市| 镇平县| 梁河县| 蛟河市| 商城县| 浦北县| 揭西县| 湖口县| 津南区| 英超| 高邮市| 永丰县| 玉田县| 越西县| 庆云县| 曲阜市| 中山市| 武川县| 延川县| 兴文县| 太谷县| 彭州市| 抚顺县| 三明市| 崇文区| 濮阳县| 会宁县| 柳河县|