本篇文章沒有做過多整理,是以前自己寫的一個小筆記,希望有緣的你讀過有些收獲
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
李順利 閱讀(1879)
評論(0) 編輯 收藏 所屬分類:
Tips