什么是ActiveMQ
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位
1.多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
2.对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去
3.支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
4.支持Ajax
5.可以很容易的进行测试和使用
ActiveMQ的消息形式
对于消息的传递有两种类型:
一种是点对点的,即一个生产者和一个消费者一一对应;
另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。
· StreamMessage -- Java原始值的数据流
· MapMessage--一套名称-值对
· TextMessage--一个字符串对象
· ObjectMessage--一个序列化的 Java对象
· BytesMessage--一个字节的数据流
ActiveMQ的安装
1.下载ActivityMQ
http://activemq.apache.org/download-archives.html 2.启动ActivityMQ
解压apache-activemq-5.4.3-bin.zip到指定目录双击apache-activemq-5.4.3\bin\activemq.bat
启动ActiveMQ以后,登陆:http://localhost:8161/admin/,创建一个Queue,命名为FirstQueue,此队列在代码中会使用到
在maven项目下需要导入的jar包。
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
最后是两个实例生产者和消费者。
生产者:
@Test
public void product() throws Exception{
//第一步:创建ConnectionFactory对象,需要指定服务端ip及端口号。
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
//第二步:使用ConnectionFactory对象创建一个Connection对象。
Connection con= connectionFactory.createConnection();
//第三步:开启连接,调用Connection对象的start方法。
con.start();
//第四步:使用Connection对象创建一个Session对象。(参数(“是否开启事务”,“应答模式”))
Session session=con.createSession(false,Session.AUTO_ACKNOWLEDGE);
//第五步:使用Session对象创建一个Queue对象。(参数要和在页面申请的队列名保持一致)
Queue queue=session.createQueue("FirstQueue");
//第六步:使用Session对象创建一个Producer对象。
MessageProducer producer=session.createProducer(queue);
//第七步:创建一个Message对象,创建一个TextMessage对象。
TextMessage textMessage=session.createTextMessage("发送的消息");
//第八步:使用Producer对象发送消息。
producer.send(textMessage);
//第九步:关闭资源。
producer.close();
session.close();
con.close();
}
消费者:
@Test
public void consumer() throws Exception{
//第一步:创建一个ConnectionFactory对象。
ConnectionFactory factory= new ActiveMQConnectionFactory("tcp://localhost:61616");
//第二步:从ConnectionFactory对象中获得一个Connection对象。
Connection connection=factory.createConnection();
//第三步:开启连接。调用Connection对象的start方法。
connection.start();
//第四步:使用Connection对象创建一个Session对象。
Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//第五步:使用Session对象创建一个队列Queue。和发送端保持一致queue,并且队列的名称一致。
Queue queue=session.createQueue("FirstQueue");
//第六步:使用Session对象创建一个Consumer对象。
MessageConsumer consumer=session.createConsumer(queue);
//第七步:接收消息。
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage=(TextMessage) message;
try {
String text=textMessage.getText();
//第八步:打印消息。
System.out.println(text);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//一定要加上这句话,程序比监听器运行快
System.in.read();
//第九步:关闭资源
consumer.close();
session.close();
connection.close();
}