安装环境
Centos7,JDK8,activemq-5.15.8
从官网下载ActiveMq
安装步骤
1.安装包上传到centos 服务器上,并解压缩。
tar -zxvf apache-activemq-5.15.8-bin.tar.gz
- 修改目录的名称
mv /var/apache-activemq-5.15.8 /var/activemq
- 命令启动服务和停止服务
./bin/activemq start 启动命令
./bin/activemq stop 停止服务
以服务的方式运行activemq
- 创建一个systemd服务文件:
vi /usr/lib/systemd/system/activemq.service
- 文件内容如下:
[Unit]
Description=ActiveMQ service
After=network.target
[Service]
Type=forking
ExecStart=/var/activemq/bin/activemq start
ExecStop=/var/activemq/bin/activemq stop
User=root
Group=root
Restart=always
RestartSec=9
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=activemq
[Install]
WantedBy=multi-user.target
不能有特殊字符
- 找到java命令所在的目录:
whereis java
- 设置activemq配置文件/var/activemq/bin/env中的JAVA_HOME
- 通过systemctl 来启动服务和停止服务
启动服务:systemctl start activemq
查看服务状态:systemctl status activemq
停止服务:systemctl stop
创建软件链接: ln -s /usr/lib/systemd/system/activemq.service /etc/systemd/system/multi-user.target.wants/activemq.service
开机自启: systemctl enable activemq
检测是否开启成功(enable): systemctl list-unit-files |grep activemq
启动服务是报错:
解决方式:activemq.service有特殊字符需要修改或者重新加载env配置文件:
source /var/activemq/bin/env
重新启动并查看服务的状态:
开机自启动设置和查看
- 端口,防火墙配置;Web管理端口默认为8161(admin/admin),通讯端口默认为61616。
- 修改防火墙:
firewall-cmd --zone=public --add-port=8161/tcp --permanent
firewall-cmd --zone=public --add-port=61616/tcp --permanent
systemctl restart firewalld.service
- 关闭防火墙
systemctl stop firewalld.service
登录activemq的web页面管理:
- web管理页面配置信息:
web管理登录账号密码文件:jetty-realm.properties(在/var/activemq/conf目录下)
配置文件:jetty.xml
web管理页面的端口和是否需要账号密码登录的配置文件:jetty.xml(在/var/activemq/conf目录下)
使用java操作activemq
- 引入依赖
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.8</version>
</dependency>
- 消费者
package com.tkxb.mqdemo.simple.queue;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class HelloWorldConsumer {
public static void main(String[] args) {
new ConsumerThread("tcp://activemq.tkxb.com:61616", "helloWorldQueue").start();
new ConsumerThread("tcp://activemq.tkxb.com:61616", "helloWorldQueue").start();
}
static class ConsumerThread extends Thread {
String brokerUrl;
String destinationUrl;
public ConsumerThread(String brokerUrl, String destinationUrl) {
this.brokerUrl = brokerUrl;
this.destinationUrl = destinationUrl;
}
@Override
public void run() {
ActiveMQConnectionFactory connectionFactory;
Connection conn;
Session session;
MessageConsumer consumer;
try {
// brokerURL http://activemq.apache.org/connection-configuration-uri.html
// 1、创建连接工厂
connectionFactory = new ActiveMQConnectionFactory(this.brokerUrl);
// 2、创建连接对象
conn = connectionFactory.createConnection();
conn.start(); // 一定要启动
// 3、创建会话(可以创建一个或者多个session)
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4、创建点对点接收的目标,queue - 点对点
Destination destination = session.createQueue(destinationUrl);
// 5、创建消费者消息 http://activemq.apache.org/destination-options.html
consumer = session.createConsumer(destination);
// 6、接收消息(没有消息就持续等待)
Message message = consumer.receive();
if (message instanceof TextMessage) {
System.out.println("收到文本消息:" + ((TextMessage) message).getText());
} else {
System.out.println(message);
}
consumer.close();
session.close();
conn.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
- 生产者
package com.tkxb.mqdemo.simple.queue;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQConnectionFactoryCustomizer;
import javax.jms.*;
public class HelloWorldProvider {
public static void main(String[] args) {
new ProducerThread("tcp://activemq.tkxb.com:61616", "helloWorldQueue").start();
}
static class ProducerThread extends Thread {
String brokerUrl;
String destinationUrl;
public ProducerThread(String brokerUrl, String destinationUrl) {
this.brokerUrl = brokerUrl;
this.destinationUrl = destinationUrl;
}
@Override
public void run() {
ActiveMQConnectionFactory activeMQConnectionFactory;
Connection connection;
try {
//1.创建连接工厂
activeMQConnectionFactory = new ActiveMQConnectionFactory(brokerUrl);
//2.使用工厂创建连接对象
connection = activeMQConnectionFactory.createConnection();
//3.创建会话对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//4.创建点对点的目标
Queue queue = session.createQueue(destinationUrl);
//5.创建生产者的销售
MessageProducer producer = session.createProducer(queue);
// 设置生产者的模式,有两种可选 持久化 / 不持久化
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
//6.创建一个文本信息
String text = "Hello world!";
TextMessage message = session.createTextMessage(text);
for (int i = 0; i < 1; i++) {
// 7、发送消息
producer.send(message);
}
// 8、 关闭连接
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
整合springboot使用
- 引入依赖
<dependencies>
<!--直接使用spring-boot-starter-activemq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- MQTT -->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
</dependencies>
- 消费者
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.annotation.JmsListener;
@SpringBootApplication
@EnableJms
public class Consumer {
@JmsListener(destination = "queue1")
public void receive(String message) {
System.out.println("收到消息:" + message);
}
public static void main(String[] args) {
SpringApplication.run(Consumer.class, args);
}
}
- 生产者
package hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.core.JmsTemplate;
import javax.annotation.PostConstruct;
@SpringBootApplication
public class Producer {
@Autowired
private JmsTemplate jmsTemplate;
@PostConstruct
public void init() {
jmsTemplate.convertAndSend("queue1", "Hello Spring 4");
}
public static void main(String[] args) {
SpringApplication.run(Producer.class, args);
}
}
- 配置文件
spring.activemq.broker-url=tcp://activemq.tkxb.com:61616
spring.activemq.user=admin
spring.activemq.password=admin