ActiveMQ.docx
《ActiveMQ.docx》由会员分享,可在线阅读,更多相关《ActiveMQ.docx(19页珍藏版)》请在冰豆网上搜索。
ActiveMQ
1.ActiveMQ
1.1.什么是ActiveMQ
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。
ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
主要特点:
1.多种语言和协议编写客户端。
语言:
Java,C,C++,C#,Ruby,Perl,Python,PHP。
应用协议:
OpenWire,StompREST,WSNotification,XMPP,AMQP
2.完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)
3.对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
4.通过了常见J2EE服务器(如Geronimo,JBoss4,GlassFish,WebLogic)的测试,其中通过JCA1.5resourceadaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上
5.支持多种传送协议:
in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6.支持通过JDBC和journal提供高速的消息持久化
7.从设计上保证了高性能的集群,客户端-服务器,点对点
8.支持Ajax
9.支持与Axis的整合
10.可以很容易得调用内嵌JMSprovider,进行测试
1.2.ActiveMQ的消息形式
对于消息的传递有两种类型:
一种是点对点的,即一个生产者和一个消费者一一对应;
另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。
·StreamMessage--Java原始值的数据流
·MapMessage--一套名称-值对
·TextMessage--一个字符串对象
·ObjectMessage--一个序列化的Java对象
·BytesMessage--一个字节的数据流
2.ActiveMQ的安装
进入http:
//activemq.apache.org/下载ActiveMQ
使用的版本是5.12.0
2.1.安装环境:
1、需要jdk
2、安装Linux系统。
生产环境都是Linux系统。
2.2.安装步骤
第一步:
把ActiveMQ的压缩包上传到Linux系统。
第二步:
解压缩。
第三步:
启动。
使用bin目录下的activemq命令启动:
[root@localhostbin]#./activemqstart
关闭:
[root@localhostbin]#./activemqstop
查看状态:
[root@localhostbin]#./activemqstatus
注意:
如果ActiveMQ整合spring使用不要使用activemq-all-5.12.0.jar包。
建议使用5.11.2
进入管理后台:
http:
//192.168.25.168:
8161/admin
用户名:
admin
密码:
admin
3.ActiveMQ的使用方法
3.1.Queue
3.1.1.Producer
生产者:
生产消息,发送端。
把jar包添加到工程中。
使用5.11.2版本的jar包。
第一步:
创建ConnectionFactory对象,需要指定服务端ip及端口号。
第二步:
使用ConnectionFactory对象创建一个Connection对象。
第三步:
开启连接,调用Connection对象的start方法。
第四步:
使用Connection对象创建一个Session对象。
第五步:
使用Session对象创建一个Destination对象(topic、queue),此处创建一个Queue对象。
第六步:
使用Session对象创建一个Producer对象。
第七步:
创建一个Message对象,创建一个TextMessage对象。
第八步:
使用Producer对象发送消息。
第九步:
关闭资源。
@Test
publicvoidtestQueueProducer()throwsException{
//第一步:
创建ConnectionFactory对象,需要指定服务端ip及端口号。
//brokerURL服务器的ip及端口号
ConnectionFactoryconnectionFactory=newActiveMQConnectionFactory("tcp:
//192.168.25.168:
61616");
//第二步:
使用ConnectionFactory对象创建一个Connection对象。
Connectionconnection=connectionFactory.createConnection();
//第三步:
开启连接,调用Connection对象的start方法。
connection.start();
//第四步:
使用Connection对象创建一个Session对象。
//第一个参数:
是否开启事务。
true:
开启事务,第二个参数忽略。
//第二个参数:
当第一个参数为false时,才有意义。
消息的应答模式。
1、自动应答2、手动应答。
一般是自动应答。
Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//第五步:
使用Session对象创建一个Destination对象(topic、queue),此处创建一个Queue对象。
//参数:
队列的名称。
Queuequeue=session.createQueue("test-queue");
//第六步:
使用Session对象创建一个Producer对象。
MessageProducerproducer=session.createProducer(queue);
//第七步:
创建一个Message对象,创建一个TextMessage对象。
/*TextMessagemessage=newActiveMQTextMessage();
message.setText("helloactiveMq,thisismyfirsttest.");*/
TextMessagetextMessage=session.createTextMessage("helloactiveMq,thisismyfirsttest.");
//第八步:
使用Producer对象发送消息。
producer.send(textMessage);
//第九步:
关闭资源。
producer.close();
session.close();
connection.close();
}
3.1.2.Consumer
消费者:
接收消息。
第一步:
创建一个ConnectionFactory对象。
第二步:
从ConnectionFactory对象中获得一个Connection对象。
第三步:
开启连接。
调用Connection对象的start方法。
第四步:
使用Connection对象创建一个Session对象。
第五步:
使用Session对象创建一个Destination对象。
和发送端保持一致queue,并且队列的名称一致。
第六步:
使用Session对象创建一个Consumer对象。
第七步:
接收消息。
第八步:
打印消息。
第九步:
关闭资源
@Test
publicvoidtestQueueConsumer()throwsException{
//第一步:
创建一个ConnectionFactory对象。
ConnectionFactoryconnectionFactory=newActiveMQConnectionFactory("tcp:
//192.168.25.168:
61616");
//第二步:
从ConnectionFactory对象中获得一个Connection对象。
Connectionconnection=connectionFactory.createConnection();
//第三步:
开启连接。
调用Connection对象的start方法。
connection.start();
//第四步:
使用Connection对象创建一个Session对象。
Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//第五步:
使用Session对象创建一个Destination对象。
和发送端保持一致queue,并且队列的名称一致。
Queuequeue=session.createQueue("test-queue");
//第六步:
使用Session对象创建一个Consumer对象。
MessageConsumerconsumer=session.createConsumer(queue);
//第七步:
接收消息。
consumer.setMessageListener(newMessageListener(){
@Override
publicvoidonMessage(Messagemessage){
try{
TextMessagetextMessage=(TextMessage)message;
Stringtext=null;
//取消息的内容
text=textMessage.getText();
//第八步:
打印消息。
System.out.println(text);
}catch(JMSExceptione){
e.printStackTrace();
}
}
});
//等待键盘输入
System.in.read();
//第九步:
关闭资源
consumer.close();
session.close();
connection.close();
}
3.2.Topic
3.2.1.Producer
使用步骤:
第一步:
创建ConnectionFactory对象,需要指定服务端ip及端口号。
第二步:
使用ConnectionFactory对象创建一个Connection对象。
第三步:
开启连接,调用Connection对象的start方法。
第四步:
使用Connection对象创建一个Session对象。
第五步:
使用Session对象创建一个Destination对象(topic、queue),此处创建一个Topic对象。
第六步:
使用Session对象创建一个Producer对象。
第七步:
创建一个Message对象,创建一个TextMessage对象。
第八步:
使用Producer对象发送消息。
第九步:
关闭资源。
@Test
publicvoidtestTopicProducer()throwsException{
//第一步:
创建ConnectionFactory对象,需要指定服务端ip及端口号。
//brokerURL服务器的ip及端口号
ConnectionFactoryconnectionFactory=newActiveMQConnectionFactory("tcp:
//192.168.25.168:
61616");
//第二步:
使用ConnectionFactory对象创建一个Connection对象。
Connectionconnection=connectionFactory.createConnection();
//第三步:
开启连接,调用Connection对象的start方法。
connection.start();
//第四步:
使用Connection对象创建一个Session对象。
//第一个参数:
是否开启事务。
true:
开启事务,第二个参数忽略。
//第二个参数:
当第一个参数为false时,才有意义。
消息的应答模式。
1、自动应答2、手动应答。
一般是自动应答。
Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//第五步:
使用Session对象创建一个Destination对象(topic、queue),此处创建一个topic对象。
//参数:
话题的名称。
Topictopic=session.createTopic("test-topic");
//第六步:
使用Session对象创建一个Producer对象。
MessageProducerproducer=session.createProducer(topic);
//第七步:
创建一个Message对象,创建一个TextMessage对象。
/*
*TextMessagemessage=newActiveMQTextMessage();message.setText(
*"helloactiveMq,thisismyfirsttest.");
*/
TextMessagetextMessage=session.createTextMessage("helloactiveMq,thisismytopictest");
//第八步:
使用Producer对象发送消息。
producer.send(textMessage);
//第九步:
关闭资源。
producer.close();
session.close();
connection.close();
}
3.2.2.Consumer
消费者:
接收消息。
第一步:
创建一个ConnectionFactory对象。
第二步:
从ConnectionFactory对象中获得一个Connection对象。
第三步:
开启连接。
调用Connection对象的start方法。
第四步:
使用Connection对象创建一个Session对象。
第五步:
使用Session对象创建一个Destination对象。
和发送端保持一致topic,并且话题的名称一致。
第六步:
使用Session对象创建一个Consumer对象。
第七步:
接收消息。
第八步:
打印消息。
第九步:
关闭资源
@Test
publicvoidtestTopicConsumer()throwsException{
//第一步:
创建一个ConnectionFactory对象。
ConnectionFactoryconnectionFactory=newActiveMQConnectionFactory("tcp:
//192.168.25.168:
61616");
//第二步:
从ConnectionFactory对象中获得一个Connection对象。
Connectionconnection=connectionFactory.createConnection();
//第三步:
开启连接。
调用Connection对象的start方法。
connection.start();
//第四步:
使用Connection对象创建一个Session对象。
Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//第五步:
使用Session对象创建一个Destination对象。
和发送端保持一致topic,并且话题的名称一致。
Topictopic=session.createTopic("test-topic");
//第六步:
使用Session对象创建一个Consumer对象。
MessageConsumerconsumer=session.createConsumer(topic);
//第七步:
接收消息。
consumer.setMessageListener(newMessageListener(){
@Override
publicvoidonMessage(Messagemessage){
try{
TextMessagetextMessage=(TextMessage)message;
Stringtext=null;
//取消息的内容
text=textMessage.getText();
//第八步:
打印消息。
System.out.println(text);
}catch(JMSExceptione){
e.printStackTrace();
}
}
});
System.out.println("topic的消费端03。
。
。
。
。
");
//等待键盘输入
System.in.read();
//第九步:
关闭资源
consumer.close();
session.close();
connection.close();
}
4.Activemq整合spring
4.1.使用方法
第一步:
引用相关的jar包。
org.springframework
spring-jms
org.springframework
spring-context-support
第二步:
配置Activemq整合spring。
配置ConnectionFactory
xmlversion="1.0"encoding="UTF-8"?
>
//www.springframework.org/schema/beans"
xmlns:
context="http:
//www.springframework.org/schema/context"xmlns:
p="http:
//www.springframework.org/schema/p"
xmlns:
aop="http:
//www.springframework.org/schema/aop"xmlns:
tx="http:
//www.springframework.org/schema/tx"
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="http:
//www.springframework.org/schema/beanshttp:
//www.springframework.org/schema/beans/spring-beans-4.2.xsd
http:
//www.springframework.org/schema/contexthttp:
//www.springframework.org/schema/context/spring-context-4.2.xsd
http:
//www.springframework.org/schema/aophttp:
//www.springframework.org/schema/aop/spring-aop-4.2.xsd
http:
//www.springframework.org/schema/txhttp:
//www.springframework.org/schema/tx/spring-tx-4.2.xsd
http:
//www.springframework.org/schema/utilhttp:
//www.springframework.org/schema/util/spring-util-4.2.xsd">
--真正可以产生Connection的ConnectionFactory,由对应的JMS服务厂商提供-->
//192.168.25.168:
61616"/>
--Spring用于管理真正的ConnectionFactory的ConnectionFactory-->
class="org.springframework.jms.connection.SingleConnectionFactory">
--目标ConnectionFactory对应真实的可以产生JMSConnection的ConnectionFactory-->
第三步:
配置生产者。
使用JMSTemplate对象。
发送消息。
第四步:
在spring容器中配置Destination。
xmlversion="1.0"encoding="UTF-8"?
>
//www.springframework.org/schema/beans"
xmlns:
context="http:
//www.springframework.org/schema/context"xmlns:
p="http:
//www.springframework