一、安装ActiveMQ
1、安装jdk环境
activeMq运行需要jdk环境
2、创建文件夹,上传压缩包,并解压
3、进入bin目录下,启动activeMq
[root@localhost bin]# ./activemq start
4、浏览器访问activeMq
访问地址:http://192.168.200.134:8161/admin/
用户名:admin
密码:admin
二、使用java代码调用activemq
1、点对点模式
(1)、生产者代码
package com.activemq.demo;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;
public class P2PDemo {
/**
* 测试点对点模式的发布者
*/
@Test
public void testP2pProducer() throws Exception {
// 远程activemq中broker的访问URL
String brokerURL = "tcp://192.168.25.128:61616";
// 创建ConnectionFactory,连接activemq的broker
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
// 通过ConnectionFactory,创建Connection
Connection connection = connectionFactory.createConnection();
// 启动Connection
connection.start();
// 通过Connection创建Session
// 第一个参数:是否支持事务,如果为true,则会忽略第二个参数,被jms服务器设置为SESSION_TRANSACTED
// 第二个参数为false时,paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。
// Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。哪怕是接收端发生异常,也会被当作正常发送成功。
// Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法,jms服务器才会当作发送成功,并删除消息。
// DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 通过Session创建Destination目的地(Queue\Topic)
Queue queue = session.createQueue("test-p2p");
// 通过Session创建Producer
MessageProducer producer = session.createProducer(queue);
// 通过Session创建Message
TextMessage message = session.createTextMessage("测试点对点模式发送接收消息");
// 调用Producer的send方法发送Message到指定的Destination
producer.send(message);
// 释放资源
producer.close();
session.close();
connection.close();
}
}
(2)、消费者代码
package com.activemq.demo;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;
public class P2PDemo {
/**
* 测试点对点模式的消费者
* @throws Exception
*/
@Test
public void testP2pConsumer() throws Exception {
// 远程activemq中broker的访问URL
String brokerURL = "tcp://192.168.25.128:61616";
// 创建ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
// 创建Connection
Connection connection = connectionFactory.createConnection();
// 启动Connection
connection.start();
// 创建Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建Destination
Queue queue = session.createQueue("test-p2p");
// 创建Consumer
MessageConsumer consumer = session.createConsumer(queue);
// 创建MessageListener接收消息,以后只要有消息,就会通过这个监听器接收到
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
// 处理消息
try {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println(textMessage.getText());
}
} catch (Exception e) {
}
}
});
// 等待
System.in.read();
// 释放资源
consumer.close();
session.close();
connection.close();
}
}
2、发布订阅模式
(1)、生产者代码
package test;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;
/**
* 生产者
* @author Administrator
*
*/
public class TestActivemq {
/**
* 订阅发布模式
* @throws Exception
*/
@Test
public void testTopicProducer() throws Exception {
// 远程activemq中broker的访问URL
String brokerURL = "tcp://192.168.200.134:61616";
// 创建ConnectionFactory,连接activemq的broker
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
// 通过ConnectionFactory,创建Connection
Connection connection = connectionFactory.createConnection();
// 启动Connection
connection.start();
// 通过Connection创建Session
// 第一个参数:是否启动activemq事务
// 第二个参数:应答模式,如果第一个参数为true,则该参数无效,应答模式有:自动应答,手动应答等
// 应答模式就是消费者给broker的应答,如果消息消费成功,broker会删除该消息
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 通过Session创建Destination目的地(Queue\Topic)
Topic topic = session.createTopic("test-topic");
// 通过Session创建Producer
MessageProducer producer = session.createProducer(topic);
// 通过Session创建Message
TextMessage message = session.createTextMessage("测试发布订阅模式发送接收消息");
// 调用Producer的send方法发送Message到指定的Destination
producer.send(message);
// 释放资源
producer.close();
session.close();
connection.close();
}
}
(2)、消费者代码
package test;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;
/**
* 消费者
* @author Administrator
*
*/
public class TestConsumer {
/**
* 发布订阅模式
* @throws Exception
*/
@Test
public void testTopicConsumer() throws Exception {
// 远程activemq中broker的访问URL
String brokerURL = "tcp://192.168.200.134:61616";
// 创建ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
// 创建Connection
Connection connection = connectionFactory.createConnection();
// 启动Connection
connection.start();
// 创建Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建Destination
Topic topic = session.createTopic("test-topic");
// 创建Consumer
MessageConsumer consumer = session.createConsumer(topic);
System.out.println("console 3:");
// 创建MessageListener接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
// 处理消息
try {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println(textMessage.getText());
}
} catch (Exception e) {
}
}
});
// 等待
System.in.read();
// 释放资源
consumer.close();
session.close();
connection.close();
}
}