相對于Weblogic這種大家伙來說,在ActiveMQ5.3.0上建立隊列和主題還是相對容易的,當然如果路沒走對也要費一番周折,本人在此寫出小文,希望能對ActiveMQ初學者有所裨益,順便感謝網絡上那些辛勤的有共享精神的ActiveMQ研究者和鄙視一下那些懶惰的有剽竊習慣的轉載者。
一.下載安裝ActiveMQ。
在http://activemq.apache.org/ 你可以得到ActiveMQ的最新版本,本人下載的是win版本,下載到本地后解壓到一個目錄(以后簡稱ActiveMQ解壓目錄)就算安裝完畢了,確實很簡單。
二.啟動ActiveMQ。
啟動它也很容易,找到ActiveMQ解壓目錄下的bin目錄,雙擊activemq.bat就可以了,如果嫌麻煩可以做成一個批處理文件,然后讓計劃任務自動調用它。activemq.bat啟動后會出現一個命令行窗口,這意味著broker已經準備就緒了。
三.創建隊列和主題
ActiveMQ啟動后,我們可以就使用 http://localhost:8161/admin 進入ActiveMQ的消息管理后臺系統,如下圖:

在這個頁面中有一排橫向菜單,如果你需要創建隊列Queue,點擊Queues菜單,輸入你想要的隊列的名稱,再點擊Create按鈕,隊列即被創建好了;主題也很類似,你點擊Topics菜單,輸入你想要的主題的名稱,再點擊create按鈕,主題也就建立好了。確實是非常快捷方便。本人建立了隊列DealQueue和主題BuyTopic,用于下面的程序。
四.利用隊列和主題收發消息。
有了Spring的幫助,JMS處理能省卻很多功夫,我們只需要進行對應的配置即可,下面是通過隊列DealQueue和主題BuyTopic收發消息的配置和消息發送器監聽器源代碼,大家可以參考,另外也可以從這 這里(注意為了減小體積,包都被刪除了,請到ActiveMQ安裝目錄的lib尋找相應的包載入,其它通用包請自行尋找) 下載源碼查看。
Spring上下文配置文件bean.xml,這里文件里配置的有連接工廠,jms模板,目的地,消息發送者和接受者等。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<!-- 連接工廠 -->
<bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://192.168.0.1:61616</value>
</property>

</bean>

<!-- JMS模板 -->
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="connectionFactory" />
</property>
</bean>

<!-- **************************** -->
<!-- 以下是隊列DealQueue的配置 -->
<!-- **************************** -->
<!-- 在ActiveMQ上配置的隊列DealQueue -->
<bean id="dest4DealQueue"
class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0">
<value>DealQueue</value>
</constructor-arg>
</bean>
<!-- JMS 消息發送者 ,用于給DealQueue發送消息 -->
<bean id="jmsSender4DealQueue"
class="com.heyang.sender.JmsSender">
<property name="jmsTemplate" ref="jmsTemplate" />
<property name="destination" ref="dest4DealQueue" />
</bean>
<!-- JMS 消息監聽容器,Spring容器啟動后自行監聽DealQueue,有消息后會交給dealQueueListener處理 -->
<bean id="listenerContainer4DealQueue"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="concurrentConsumers" value="1" />
<property name="destination" ref="dest4DealQueue" />
<property name="messageListener" ref="dealQueueListener" />
</bean>
<!-- MDP:用于接收DealQueue上的消息 -->
<bean id="dealQueueListener" class="com.heyang.listener.DealQueueListener" />
<!-- **************************** -->
<!-- 以下是主題BuyTopic的配置 -->
<!-- **************************** -->
<!-- 在ActiveMQ上配置的主題 -->
<bean id="dest4BuyTopic"
class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0">
<value>BuyTopic</value>
</constructor-arg>
</bean>
<!-- JMS 消息發送者 ,用于給BuyTopic發送消息 -->
<bean id="jmsSender4BuyTopic"
class="com.heyang.sender.JmsSender">
<property name="jmsTemplate" ref="jmsTemplate" />
<property name="destination" ref="dest4BuyTopic" />
</bean>
<!-- JMS 消息監聽容器,Spring容器啟動后自行監聽BuyTopic,有消息后會交給buyTopicListener處理 -->
<bean id="listenerContainer4BuyTopic"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="concurrentConsumers" value="1" />
<property name="destination" ref="dest4BuyTopic" />
<property name="messageListener" ref="buyTopicListener" />
</bean>
<!-- MDP:用于接收BuyTopic上的消息 -->
<bean id="buyTopicListener" class="com.heyang.listener.BuyTopicListener" />
</beans>
三個對應的類:
1.JMS消息發送者:
package com.heyang.sender;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Session;

import org.apache.activemq.Message;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

/**
* 此類用發送消息
* @author 何楊
* @date 2009-10-15
* @time 上午07:44:15
*/
public class JmsSender {

// JMS模板
private JmsTemplate jmsTemplate;

// 目的地
private Destination destination;

public void send(final String msg) {
jmsTemplate.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return (Message) session.createTextMessage(msg);
}
});
}

public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}

public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}

public Destination getDestination() {
return destination;
}

public void setDestination(Destination destination) {
this.destination = destination;
}
}
JMS消息監聽者,用于監聽BuyTopic:
package com.heyang.listener;

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.apache.log4j.Logger;

/**
* JMS消息監聽者,用于監聽BuyTopic。
*
* @author 何楊
* @date 2009-10-13
* @time 下午04:10:33
*/
public class BuyTopicListener implements MessageListener {
public static Logger logger = Logger.getLogger(DealQueueListener.class);
public void onMessage(Message message) {
if (message instanceof TextMessage) {
// 消息轉化
String msg="";
try{
msg=((TextMessage) message).getText();
System.out.println("從BuyTopic收到消息:"+msg);
} catch (Exception ex) {
logger.error(ex);
ex.printStackTrace();
return;
}
}
}
}
JMS消息監聽者,用于監聽DealQueue:
package com.heyang.listener;

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.apache.log4j.Logger;

/**
* JMS消息監聽者,用于監聽DealQueue。
*
* @author 何楊
* @date 2009-10-13
* @time 下午04:10:33
*/
public class DealQueueListener implements MessageListener {
public static Logger logger = Logger.getLogger(DealQueueListener.class);
public void onMessage(Message message) {
if (message instanceof TextMessage) {
// 消息轉化
String msg="";
try{
msg=((TextMessage) message).getText();
System.out.println("從DealQueue收到消息:"+msg);
} catch (Exception ex) {
logger.error(ex);
ex.printStackTrace();
return;
}
}
}
}
用戶可以使用Test.java中的語句來測試一下效果。另外有一點想贅述一下,上述兩個消息監聽者是受Spring容器控制的,它們之所以能成為Message Diven Pojo是因為Spring容器自啟動開始就對目標進行輪詢,如果發現有消息就通知指定消息監聽者響應,這樣消息監聽者的onMessage函數就會被調用,其背后的調用者即上面配置文件中的listenerContainer4DealQueue和listenerContainer4BuyTopic,我們雖沒有直接使用它們但它們從Spring上下文啟動伊始就一直開始工作了,從log4j的輸出就能看出這一點,當然為了消除輪詢輸出的消極影響,你可以調高log4j的輸出級別。
但愿此文能對你有所幫助,全文完。
一.下載安裝ActiveMQ。
在http://activemq.apache.org/ 你可以得到ActiveMQ的最新版本,本人下載的是win版本,下載到本地后解壓到一個目錄(以后簡稱ActiveMQ解壓目錄)就算安裝完畢了,確實很簡單。
二.啟動ActiveMQ。
啟動它也很容易,找到ActiveMQ解壓目錄下的bin目錄,雙擊activemq.bat就可以了,如果嫌麻煩可以做成一個批處理文件,然后讓計劃任務自動調用它。activemq.bat啟動后會出現一個命令行窗口,這意味著broker已經準備就緒了。
三.創建隊列和主題
ActiveMQ啟動后,我們可以就使用 http://localhost:8161/admin 進入ActiveMQ的消息管理后臺系統,如下圖:

在這個頁面中有一排橫向菜單,如果你需要創建隊列Queue,點擊Queues菜單,輸入你想要的隊列的名稱,再點擊Create按鈕,隊列即被創建好了;主題也很類似,你點擊Topics菜單,輸入你想要的主題的名稱,再點擊create按鈕,主題也就建立好了。確實是非常快捷方便。本人建立了隊列DealQueue和主題BuyTopic,用于下面的程序。
四.利用隊列和主題收發消息。
有了Spring的幫助,JMS處理能省卻很多功夫,我們只需要進行對應的配置即可,下面是通過隊列DealQueue和主題BuyTopic收發消息的配置和消息發送器監聽器源代碼,大家可以參考,另外也可以從這 這里(注意為了減小體積,包都被刪除了,請到ActiveMQ安裝目錄的lib尋找相應的包載入,其它通用包請自行尋找) 下載源碼查看。
Spring上下文配置文件bean.xml,這里文件里配置的有連接工廠,jms模板,目的地,消息發送者和接受者等。

















































































三個對應的類:
1.JMS消息發送者:
















































JMS消息監聽者,用于監聽BuyTopic:


































JMS消息監聽者,用于監聽DealQueue:




































用戶可以使用Test.java中的語句來測試一下效果。另外有一點想贅述一下,上述兩個消息監聽者是受Spring容器控制的,它們之所以能成為Message Diven Pojo是因為Spring容器自啟動開始就對目標進行輪詢,如果發現有消息就通知指定消息監聽者響應,這樣消息監聽者的onMessage函數就會被調用,其背后的調用者即上面配置文件中的listenerContainer4DealQueue和listenerContainer4BuyTopic,我們雖沒有直接使用它們但它們從Spring上下文啟動伊始就一直開始工作了,從log4j的輸出就能看出這一點,當然為了消除輪詢輸出的消極影響,你可以調高log4j的輸出級別。
但愿此文能對你有所幫助,全文完。