关于ActiveMQ的一点总结
生活随笔
收集整理的這篇文章主要介紹了
关于ActiveMQ的一点总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ActiveMQ入門
作者:一路向北摘要:本文主要講述ActiveMQ的基本知識(shí)和使用方法,并簡(jiǎn)單結(jié)合spring使用ActiveMQ。
一、ActiveMQ特性和使用總覽企業(yè)消息軟件從80年代起就存在,它不只是一種應(yīng)用間消息傳遞風(fēng)格,也是一種集成風(fēng)格。因此,消息傳遞可以滿足應(yīng)用間的通知和互相操作。但是開源的解決方案是到最近10年才出現(xiàn)的。Apache ActiveMQ就是其中一種。它使應(yīng)用間能以異步,松耦合方式交流。本章將向您介紹ActiveMQ。ActiveMQ是Apache軟件基金下的一個(gè)開源軟件,它遵循JMS1.1規(guī)范(Java Message Service),是消息驅(qū)動(dòng)中間件軟件(MOM)。它為企業(yè)消息傳遞提供高可用,出色性能,可擴(kuò)展,穩(wěn)定和安全保障。ActiveMQ使用Apache許可協(xié)議。因此,任何人都可以使用和修改它而不必反饋任何改變。這對(duì)于商業(yè)上將ActiveMQ用在重要用途的人尤為關(guān)鍵。MOM的工作是在分布式的各應(yīng)用之間調(diào)度事件和消息,使之到達(dá)指定的接收者。所以高可用,高性能,高可擴(kuò)展性尤為關(guān)鍵。ActiveMQ的目標(biāo)是在盡可能多的平臺(tái)和語(yǔ)言上提供一個(gè)標(biāo)準(zhǔn)的,消息驅(qū)動(dòng)的應(yīng)用集成。ActiveMQ實(shí)現(xiàn)JMS規(guī)范并在此之上提供大量額外的特性。下面是一個(gè)高層次的特性列表。·遵循JMS規(guī)范 ----理解ActiveMQ的起始點(diǎn)是明白ActiveMQ的各種特性是JMS1.1規(guī)范的實(shí)現(xiàn)。本章后面將討論JMS規(guī)范提供的好處和保證。它們包括同步和異步消息傳遞,一次和只有一次的消息傳遞,對(duì)于預(yù)訂者的持久消息等等。依附于JMS規(guī)范意味著,不論JMS消息提供者是誰(shuí),同樣的基本特性都是有效的。·連接----ActiveMQ提供各種連接選擇,包括HTTP,HTTPS,IP多點(diǎn)傳送,SSL,STOMP,TCP,UDP,XMPP等。大量的連接協(xié)議支持使之具有更好的靈活性。很多現(xiàn)有的系統(tǒng)使用一種特定協(xié)議并且不能改變,所以一個(gè)支持多種協(xié)議的消息平臺(tái)降低了使用的門檻。雖然連接很重要,但是和其他容器集成也同樣重要。第四章將講解ActiveMQ的傳輸連接器(transport connectors)和網(wǎng)絡(luò)連接器(network connectors)。·可插拔的持久性和安全----ActiveMQ提供多種持久性方案可供選擇,也可以完全按自己需求定制驗(yàn)證和授權(quán)。例如,ActiveMQ通過(guò)KahaDB提供自己的超快速消息持久方案(ultra-fast message persistence),但也支持標(biāo)準(zhǔn)的JDBC方案。ActiveMQ可以通過(guò)配置文件提供簡(jiǎn)單的驗(yàn)證和授權(quán),也提供標(biāo)準(zhǔn)的JAAS登陸模塊。·用Java建立消息驅(qū)動(dòng)應(yīng)用----ActiveMQ最常用在Java應(yīng)用中,用于發(fā)送和接收消息。這部分的內(nèi)容涉及JMS規(guī)范API。·與應(yīng)用服務(wù)器集成----ActiveMQ與java應(yīng)用服務(wù)器集成是很常見(jiàn)的。·客戶端APIs----ActiveMQ對(duì)多種語(yǔ)言提供客戶端API,除了Java之外還有C/C++,.NET,Perl,PHP,Python,Ruby等。這使得ActiveMQ能用在Java之外的其它語(yǔ)言中。很多其它語(yǔ)言都可以通過(guò)ActiveMQ提供的客戶端API使用ActiveMQ的全部特性。當(dāng)然,ActiveMQ代理器(broker)仍然是運(yùn)行在java虛擬機(jī)上,但是客戶端能夠使用其它的被支持的語(yǔ)言。·代理器集群(Broker clustering)----為了利于擴(kuò)展,多個(gè)ActiveMQ broker能夠聯(lián)合工作。這個(gè)方式就是network of brokers并且能支持多種拓?fù)浣Y(jié)構(gòu)。·高級(jí)代理器特性和客戶端選項(xiàng)----ActiveMQ為代理器和客戶端連接提供很多高級(jí)的特性。ActiveMQ也可以通過(guò)代理器的XML配置文件支持Apache Camel。·簡(jiǎn)單的管理----ActiveMQ是為開發(fā)者設(shè)計(jì)的。它并不需要專門的管理工具,因?yàn)樗峁└鞣N易用且強(qiáng)大的管理特性。有很多方法去監(jiān)控ActiveMQ的各個(gè)方面,可以通過(guò)JMX使用JConsole或ActiveMQ web console;可以運(yùn)行ActiveMQ消息報(bào)告;可以用命令行腳本;可以通過(guò)日志。用 ActiveMQ 最好還是了解下 JMSJMS 公共 點(diǎn)對(duì)點(diǎn)域 發(fā)布/訂閱域ConnectionFactory QueueConnectionFactory TopicConnectionFactoryConnection QueueConnection TopicConnectionDestination Queue TopicSession QueueSession TopicSessionMessageProducer QueueSender TopicPublisherMessageConsumer QueueReceiver TopicSubscriberJMS 定義了兩種方式:Quere(點(diǎn)對(duì)點(diǎn));Topic(發(fā)布/訂閱)。·ConnectionFactory 是連接工廠,負(fù)責(zé)創(chuàng)建Connection。·Connection 負(fù)責(zé)創(chuàng)建 Session。·Session 創(chuàng)建 MessageProducer(用來(lái)發(fā)消息) 和 MessageConsumer(用來(lái)接收消息)。·Destination 是消息的目的地。詳細(xì)的可以網(wǎng)上找些 JMS 規(guī)范(有中文版)
二、開始使用ActiveMQ開始使用ActiveMQ并不難。你只要啟動(dòng)代理器并確保它能接受連接和發(fā)送消息。ActiveMQ有一些自帶的例子。在這部分,你將下載和安裝Java SE,下載和安裝ActiveMQ,檢查ActiveMQ目錄,然后第一次啟動(dòng)ActiveMQ。所需工具包括JDK1.5+、Ant、ActiveMQ。
1、JDK下載和安裝ActiveMQ 要求Sun Java SE 1.5或以上。在開始這部分前,必須先安裝。JDK的下載和安裝就不是本文介紹重點(diǎn)。
2、Ant下載和安裝Ant可以用來(lái)構(gòu)建和運(yùn)行ActiveMQ自帶例子。Ant可以從Apache Ant網(wǎng)址下載。URL: http://ant.apache.org/bindownload.cgi點(diǎn)擊鏈接地址并選擇正確的壓縮包。(tar包是Linux和Unix,zip是Windows)。請(qǐng)按照下列地址安裝Ant。URL: http://ant.apache.org/manual/install.html。確保你設(shè)置好$ANT_HOME環(huán)境變量,并將$ANT_HOME/bin放到$PATH環(huán)境變量里。安裝完畢后你可以運(yùn)行下面的命令查看Ant版本。你的可能跟我的不太一樣,使用Ant的不同版本,不過(guò)這沒(méi)關(guān)系。一旦Ant輸出如上信息,你就可以確定Ant都安裝正確。
3、ActiveMQ下載和安裝ActiveMQ可以從Apache ActiveMQ網(wǎng)站下,URL: http://activemq.apache.org/download.html.點(diǎn)擊地址到5.4.3版本,你可以看到tar和zip格式包。(tar包是Linux和Unix,zip是Windows)。下載完后解壓。我的解壓到了E:\tools\apache-activemq-5.4.3從命令行進(jìn)入apache-activemq-5.4.3目錄,輸入如下命令。LICENSE----Apache Software Foundation(ASF)要求的一個(gè)文件.包含ActiveMQ使用的所有庫(kù)的許可證.NOTICE----ASF要求的另一個(gè)文件.包含ActiveMQ使用的所有庫(kù)的版權(quán)信息.README.txt 一個(gè)包含一些URL的文檔,使新手可以使用ActiveMQ.WebConsole-README.txt----包含使用ActiveMQ web console使用說(shuō)明.activemq-all-5.4.3.jar---一個(gè)jar包包含ActiveMQ所有東西。放在這里是方便你使用它。bin----包含二進(jìn)制或可運(yùn)行文件。ActiveMQ啟動(dòng)腳本就放在里面。conf--ActiveMQ所有的配置信息。data--日志和持久化文件存儲(chǔ)地方。docs--包含一個(gè)簡(jiǎn)單的index.html,該文件指向ActiveMQ網(wǎng)站。example----ActiveMQ例子。我們用這些例子來(lái)簡(jiǎn)單的測(cè)試ActiveMQ。lib----所有ActiveMQ所需庫(kù)。user-guide.html----一個(gè)簡(jiǎn)單指引啟動(dòng)ActiveMQ和運(yùn)行例子。webapps----ActiveMQ web console和一些網(wǎng)絡(luò)演示。下一部分將啟動(dòng)ActiveMQ并用這些例子驗(yàn)證它。啟動(dòng)ActiveMQ在命令行中輸入一下命令,或者直接運(yùn)行bin目錄下的activemq.bat文件剛才的命令啟動(dòng)了ActiveMQ代理器和一些連接器,使得客戶端可以通過(guò)一些諸如TCP,SSL,STOMP,XMPP協(xié)議連接進(jìn)來(lái)。請(qǐng)注意現(xiàn)在ActiveMQ已經(jīng)啟動(dòng),并且客戶端可以通過(guò)TCP 61616端口連接進(jìn)來(lái)。最好的方法是使用ActiveMQ自帶的例子來(lái)發(fā)送和接收消息。下面我們來(lái)運(yùn)行第一個(gè)例子。
4、運(yùn)行ActiveMQ第一個(gè)例子這個(gè)例子是模擬生產(chǎn)者消費(fèi)者的例子,生產(chǎn)者產(chǎn)生2000條信息,然后關(guān)閉,消費(fèi)者消費(fèi)2000信息,然后關(guān)閉。下面我們演示一下。重新打開一個(gè)DOS窗口,切到MQ目錄的example目錄下,我的是E:\tools\apache-activemq-5.4.3\example然后輸入一下命令最后一行顯示程序在等待2000個(gè)message。這是一個(gè)消費(fèi)者。再重新打開DOS窗口并且到MQ目錄下的example目錄,輸入一下命令ant producer,這個(gè)是生產(chǎn)者。輸入命令之后你回看到剛才打開的兩個(gè)DOS窗口打印出一堆東西看到BUILD SUCCESSFUL說(shuō)明程序運(yùn)行成功。消費(fèi)者窗口變成了如下內(nèi)容:示例程序演示完畢,觀看別人寫的看著沒(méi)啥意思,我們自己寫一個(gè)程序,測(cè)試一下。
三、運(yùn)行自己編寫的第一個(gè)例子我們自己編寫一個(gè)跟上面類似的例子。
1、建立web項(xiàng)目打開myeclipse,新建web項(xiàng)目,內(nèi)容填下如下:點(diǎn)擊finish。接著在項(xiàng)目根目錄下新建一個(gè)lib目錄,然后將我們上面提及的activemq-all-5.4.3.jar拷貝至lib目錄下,并將其加入項(xiàng)目library中如下圖:點(diǎn)擊OK,項(xiàng)目目前的文件夾結(jié)構(gòu)如下:2、編寫代碼在src上右鍵選擇新建class,具體如下:點(diǎn)擊finish。然后輸入如下代碼package com.mq;import java.util.Date;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.MessageProducer;import javax.jms.Session;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Producer {public static void main(String[] args) {String user = ActiveMQConnection.DEFAULT_USER;String password = ActiveMQConnection.DEFAULT_PASSWORD;String url = ActiveMQConnection.DEFAULT_BROKER_URL;String subject = "TOOL.DEFAULT";ConnectionFactory contectionFactory = new ActiveMQConnectionFactory(user,password,url);try {Connection connection = contectionFactory.createConnection();connection.start();Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);Destination destination = session.createQueue(subject);MessageProducer producer = session.createProducer(destination);for(int i = 0;i<=20;i++){MapMessage message = session.createMapMessage();message.setLong("count", new Date().getTime());Thread.sleep(1000);producer.send(message);System.out.println("--發(fā)送消息:"+new Date());}session.commit();session.close();connection.close();} catch (JMSException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}}然后再新建一個(gè)消費(fèi)者類如下圖:點(diǎn)擊finish。然后輸入如下代碼package com.mq;import java.util.Date;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.MessageListener;import javax.jms.Session;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Consumer {public static void main(String[] args) {String user = ActiveMQConnection.DEFAULT_USER;String password = ActiveMQConnection.DEFAULT_PASSWORD;String url = ActiveMQConnection.DEFAULT_BROKER_URL;String subject = "TOOL.DEFAULT";ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user,password,url);Connection connection;try {connection = connectionFactory.createConnection();connection.start();final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);Destination destination = session.createQueue(subject);MessageConsumer message = session.createConsumer(destination);message.setMessageListener(new MessageListener(){public void onMessage(Message msg) {MapMessage message = (MapMessage)msg;try {System.out.println("--收到消息:"+new Date(message.getLong("count")));session.commit();} catch (JMSException e) {e.printStackTrace();}}});Thread.sleep(30000);session.close();connection.close();} catch (JMSException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}}
3、運(yùn)行程序右鍵運(yùn)行程序Consumer類,控制臺(tái)打印出如下信息:再右鍵運(yùn)行Producer類,控制臺(tái)上打印出來(lái)的信息同上。稍等一秒,Producer類的運(yùn)行控制臺(tái)會(huì)打印出來(lái)如下信息:有信息可知,生產(chǎn)者正在生成消息,切到消費(fèi)者類的控制臺(tái)方法如下:選擇Cosumer,會(huì)看到如下信息:由信息可以看到,消費(fèi)者收到了同等數(shù)量的信息。至此我們的第一個(gè)程序成功完成。下面將MQ與spring結(jié)合使用。
四、spring與activeMQ的簡(jiǎn)單整合在做上面的測(cè)試?yán)拥臅r(shí)候我們可以看出發(fā)送一個(gè)簡(jiǎn)單的消息,要幾行代碼!其實(shí)我們的目的就是發(fā)送和接受消息。幸運(yùn)的是Spring為我們提供了大量的模板。spring為我們提供了JMSTemplate模板。
1、引入spring相關(guān)文件和配置我使用的是spring版本是3.1.0.M2,其他版本的也可以,只是配置不同,去spring官網(wǎng)下載zip包,解開后將dist目錄下的所有jar包(根據(jù)自己選擇)拷貝到項(xiàng)目lib目錄下并加入項(xiàng)目library中,具體可以參考上面步驟。
在src目錄下新建applicationContext.xml文件并輸入一下內(nèi)容:
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"default-autowire="byName">
</beans>
打開web.xml并將其內(nèi)容修改為以下內(nèi)容:
<?xml version="1.0" encoding="GBK"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext*.xml</param-value></context-param><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>
2、配置JMSTemplate模板類似于jdbcTemplate,首先要配置一個(gè)ConnectionFactory,之后要開始配置JmsTemplate模板了。最后是配置消息目標(biāo)了。消息分為隊(duì)列和主題兩大類。在applicationContext.xml中加入如下內(nèi)容:
<!-- 配置Jms模板 --><bean id="jmsTemplate"class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory" /><property name="defaultDestination" ref="destination" /><property name="receiveTimeout" value="10000" /></bean><!-- 配置JMS連接工廠 --><bean id="connectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://localhost:61616" /></bean><!-- 發(fā)送消息的目的地(隊(duì)列) --><bean id="destination"class="org.apache.activemq.command.ActiveMQQueue"><!-- 設(shè)置消息隊(duì)列的名字 --><constructor-arg index="0" value="myQueue" /></bean>
配置完成了,那么如何使用JmsTemplate發(fā)送消息呢?spring的beanfactory得到一個(gè)jmsTemplate的實(shí)例和消息目標(biāo)的實(shí)例,發(fā)送消息,夠簡(jiǎn)單的吧。下面我們就來(lái)編寫具體代碼。
3、編寫代碼
新建類ProducerService.java,界面如下:代碼如下:
package com.mq.service;public interface ProducerService {public void send();
}
新建一個(gè)生產(chǎn)者實(shí)現(xiàn)類ProducerServiceImpl.java,界面略,代碼如下:
package com.mq.service;import java.util.Date;import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;public class ProducerServiceImpl implements ProducerService {JmsTemplate jmsTemplate;Destination destination;public void send() {MessageCreator messageCreator = new MessageCreator(){public Message createMessage(Session session) throws JMSException {MapMessage message = session.createMapMessage();message.setLong("count", new Date().getTime());System.out.println("--發(fā)送消息:"+new Date());return message;}};jmsTemplate.send(this.destination,messageCreator);}public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public void setDestination(Destination destination) {this.destination = destination;}
}生產(chǎn)者編寫完了,下面我們來(lái)編寫消費(fèi)者,上面說(shuō)了,發(fā)送消息的時(shí)候,spring的beanfactory得到一個(gè)jmsTemplate的實(shí)例和消息目標(biāo)的實(shí)例,然后發(fā)送,那么接受的時(shí)候肯定也是得到一個(gè)jmsTemplate的實(shí)例和消息目標(biāo)的實(shí)例,然后接受,下面我們來(lái)看具體代碼。新建一個(gè)消費(fèi)者的借口和實(shí)現(xiàn)類,具體代碼如下:ConsumerService.java
package com.mq.service;public interface ConsumerService {public void receive();
}ConsumerServiceImpl.java
package com.mq.service;import java.util.Date;import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;import org.springframework.jms.core.JmsTemplate;public class ConsumerServiceImpl implements ConsumerService {JmsTemplate jmsTemplate;Destination destination;public void receive() {MapMessage message = (MapMessage)jmsTemplate.receive();try {System.out.println("--收到消息:"+new Date(message.getLong("count")));} catch (JMSException e) {e.printStackTrace();}}public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public void setDestination(Destination destination) {this.destination = destination;}}代碼編寫完畢,下面要進(jìn)行bean的配置,在applicationContext.xml中加入如下代碼:
<bean id="producerService"class="com.mq.service.ProducerServiceImpl"><property name="jmsTemplate" ref="jmsTemplate" /><property name="destination" ref="destination" /></bean><bean id="consumerService"class="com.mq.service.ConsumerServiceImpl"><property name="jmsTemplate" ref="jmsTemplate" /><property name="destination" ref="destination" /></bean>
附上完整的applicationContext.xml的內(nèi)容:
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"default-autowire="byName"><bean id="producerService"class="com.mq.service.ProducerServiceImpl"><property name="jmsTemplate" ref="jmsTemplate" /><property name="destination" ref="destination" /></bean><bean id="consumerService"class="com.mq.service.ConsumerServiceImpl"><property name="jmsTemplate" ref="jmsTemplate" /><property name="destination" ref="destination" /></bean><!-- 配置Jms模板 --><bean id="jmsTemplate"class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory" /><property name="defaultDestination" ref="destination" /><property name="receiveTimeout" value="10000" /></bean><!-- 配置JMS連接工廠 --><bean id="connectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://localhost:61616" /></bean><!-- 發(fā)送消息的目的地(隊(duì)列) --><bean id="destination"class="org.apache.activemq.command.ActiveMQQueue"><!-- 設(shè)置消息隊(duì)列的名字 --><constructor-arg index="0" value="myQueue" /></bean>
</beans>
4、編寫測(cè)試程序需要的業(yè)務(wù)代碼都已編寫完畢,下面編寫測(cè)試代碼。新建一個(gè)生產(chǎn)者的測(cè)試類ProducerTest.java。具體代碼如下:
package com.mq.service;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class ProducerTest {private static ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");private static void send() {ProducerService producerService = (ProducerService) appContext.getBean("producerService");producerService.send();}/*** @param args*/public static void main(String[] args) {send();}}再建一個(gè)消費(fèi)者的測(cè)試類,ConsumerTest.java,具體代碼如下:
package com.mq.service;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class ConsumerTest {private static ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");private static void receive() {ConsumerService consumerService = (ConsumerService) appContext.getBean("consumerService");consumerService.receive();}/*** @param args*/public static void main(String[] args) {receive();}}
5、運(yùn)行程序所有代碼都編寫完了,我們來(lái)看一下我們的勞動(dòng)成果。運(yùn)行生產(chǎn)者測(cè)試類。控制臺(tái)打印出如下內(nèi)容,紅線標(biāo)注的冒號(hào)后面就是我們發(fā)送的內(nèi)容:運(yùn)行消費(fèi)者測(cè)試類。控制臺(tái)打印出如下內(nèi)容,紅線標(biāo)注的冒號(hào)后面就是我們接受的內(nèi)容:兩者是一樣的。看來(lái)我們的勞動(dòng)成果沒(méi)有白費(fèi)。以上是一些AciveMQ的基本應(yīng)用,在接下來(lái)的時(shí)間,我會(huì)寫一些高級(jí)應(yīng)方面的文章,敬請(qǐng)關(guān)注本人百度空間和新郎微博。也歡迎各位通過(guò)一下兩種途徑和我進(jìn)行交流,共同進(jìn)步。推薦一下本人的微博,作為程序員,生活是非常枯燥的(一般都是很枯燥的,哪些以此為樂(lè)的不涉及),平時(shí)要自己豐富一下自己的業(yè)余生活,看些搞笑微博之類的。我每天都會(huì)發(fā)布一些糗事,歡迎大家關(guān)注。另外我在網(wǎng)上看到過(guò)有句話——程序員活該你單身身的,程序員招誰(shuí)惹誰(shuí)了啊,我們就應(yīng)該單身。不過(guò)話又說(shuō)回來(lái)了,程序員的生活確實(shí)單調(diào),感情不豐富,不會(huì)說(shuō)話,但是不能怨我們,其實(shí)我們也不想這樣。推薦關(guān)注新浪微博一千零一夜話,微博地址:http://weibo.com/1968007227/,每天發(fā)布一條夜話,你懂得,希望各位程序猿每天能給自己的另一位一句溫馨的話,不要成為苦逼的娃。
五、參考內(nèi)容1、http://yunzhongxia.iteye.com/blog/5667272、ActiveMQ in action3、apache官網(wǎng)
轉(zhuǎn)載于:https://www.cnblogs.com/jiangu66/p/3212331.html
總結(jié)
以上是生活随笔為你收集整理的关于ActiveMQ的一点总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 飞思卡尔总结
- 下一篇: 桌面图标有阴影怎么去掉