一.在linux系统安装activeMQ
1.安装并启动
linux系统的安装包地址:
https://archive.apache.org/dist/activemq/5.12.0/apache-activemq-5.12.0-bin.tar.gz
下载后通过Xshell软件上传到linux上
执行解压:tar zxvf apache-activemq-5.12.0-bin.tar.gz
解压后进入activeMQ目录
进入bin目录执行 ./activemq start
然后查看进程 ps -ef | grep activemq
activemq自动成功
2.访问active控制台
首先要查看防火墙状态systemctl status firewalld
如果防火墙是开启状态执行service firewalld stop 关闭防火墙
然后在windows浏览器输入192.168.25.131:8161/admin/
二.java客户端连接activeMQ(PTP模式)
1.消息生产者代码
public class JmsProduce {
//activeq地址
public static final String ACTIVE_URL="tcp://192.168.25.131:61616";
public static final String QUEUE_NAME="queue01";
public static void main(String[] args) throws JMSException {
//创建连接工厂(采用默认账号密码登录)
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVE_URL);
//通过连接工厂获得连接 并启动访问activemq
Connection connection = connectionFactory.createConnection();
connection.start();
//创建会话session(第一个参数为是否开启事务,第二个参数为签收规则)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//通过会话创建目的地
Queue queue = session.createQueue(QUEUE_NAME);
//通过会话创建生产者
MessageProducer producer = session.createProducer(queue);
for (int i = 0; i < 3; i++) {
//创建消息
TextMessage textMessage = session.createTextMessage("message---" + i);
//通过消息生产者发送
producer.send(textMessage);
}
//关闭资源
producer.close();
session.close();
connection.close();
System.out.println("消息发布到mq成功");
}
}
2.消息消费者者代码(同步阻塞方式)
/** 消息消费者 */
public class JmsConsumer {
// activeq地址
public static final String ACTIVE_URL = "tcp://192.168.25.131:61616";
public static final String QUEUE_NAME = "queue01";
public static void main(String[] args) throws JMSException {
// 创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVE_URL);
// 通过连接工厂创建连接,并启动访问
Connection connection = connectionFactory.createConnection();
connection.start();
// 创建会话session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建目的地
Queue queue = session.createQueue(QUEUE_NAME);
// 通过队列创建消费者
MessageConsumer consumer = session.createConsumer(queue);
while (true) {
TextMessage receive = (TextMessage) consumer.receive();
if (null != receive) {
System.out.println("消费者接收到消息:" + receive.getText());
} else {
break;
}
}
// 关闭资源
consumer.close();
session.close();
connection.close();
}
}
通过消息监听器消费消息(异步非阻塞)
/** 消息监听器消费 */
public class JmsConsumerListener {
// activeq地址
public static final String ACTIVE_URL = "tcp://192.168.25.131:61616";
public static final String QUEUE_NAME = "queue01";
public static void main(String[] args) throws JMSException, IOException {
// 创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVE_URL);
// 通过连接工厂获得连接,并开启访问
Connection connection = connectionFactory.createConnection();
connection.start();
// 创建会话session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 通过session创建目的地
Queue queue = session.createQueue(QUEUE_NAME);
// 通过队列创建消费者
MessageConsumer messageConsumer = session.createConsumer(queue);
// 通过监听的方式来消费消息
messageConsumer.setMessageListener(
new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("消息监听器监听得到消息:" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
System.in.read();
messageConsumer.close();
session.close();
connection.close();
}
}