下载
网址:https://activemq.apache.org/components/classic/download/
注意:最新版本5.17 要求jdk11, 5.16兼容jdk8
上传并解压tar 包,tar -xvf 包名
配置文件
修改conf/jetty 中127.0.0.1 为ip 地址,如果是服务器需要配置内网地址或者0.0.0.0
开放端口
如果是虚拟机那么执行
· iptables -I INPUT -p tcp --dport 8161 -j ACCEPT
·
· iptables -I INPUT -p tcp --dport 61616 -j ACCEPT
如果是服务器需要到安全组开放端口 8161和61616 两个端口
启动服务
cd 到bin目录
启动
./activemq start
停止
./activemq stop
查看是否启动成功
ps aux|grep activemq
连接web可视化界面
http://ip地址:8161/admin/ 用户名,密码 admin admin
修改密码
apache-activemq-5.16.0/conf/jetty-realm.properties 这个文件
直接上代码
pom依赖
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-spring</artifactId>
<version>5.16.0</version>
</dependency>
生产者
import com.alibaba.fastjson.JSONObject;
import com.project.hhjc.domain.Data;
import com.project.hhjc.domain.LdDo;
import com.project.hhjc.util.AddUtil;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.jms.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
//java与ActiveMQ服务器连接的url,默认端口是61616
private final String url = "tcp://ip:61616";
//Destination是Topic主题,主题的名字
private final String TOPIC_NAME = "topic01";
//@GetMapping("/scxx")
public Map scz() throws JMSException {
System.out.println("生产者启动!");
/*
* 基于JMS规范的java连接ActiveMQ的生产者代码实现
* */
//创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
//根据连接工厂建立连接
Connection connection = connectionFactory.createConnection();
//启动连接
connection.start();
System.out.println("生产者已连接MQ...");
//创建Session,参数1:是否支持事务,参数2:确认机制
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//创建Destination
Topic topic = session.createTopic(TOPIC_NAME);
//创建生产者
MessageProducer messageProducer = session.createProducer(topic);
//创建并投递消息
ArrayList<LdDo> mockshuju = AddUtil.mockshuju();
Data data = new Data();
data.setCode(200);
data.setMsg("成功!");
data.setData(mockshuju);
String sss = JSONObject.toJSONString(data);
Message message = session.createTextMessage(sss);
messageProducer.send(message);
System.out.println("消息已发送到MQ...");
//关闭连接
messageProducer.close();
session.close();
connection.close();
System.out.println("生产者已关闭连接...");
HashMap<Object, Object> map = new HashMap<>();
map.put("code",200);
map.put("msg","成功!");
return map;
}
消费者
import com.project.hhjc.websocket.service.WebScoket;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
//java与ActiveMQ服务器连接的url,默认端口是61616
private static final String url = "tcp://IP:61616";
//Destination是Topic主题,主题的名字
private static final String TOPIC_NAME = "topic01";
@Autowired
private WebScoket webScoket;
@Autowired
private ActiveProduce activeProduce;
//@Scheduled(fixedRate = 300000)
public Map qidong() throws JMSException, IOException {
System.out.println("消费者启动!!!!!");
/*
* 基于JMS规范的java连接ActiveMQ的消费者代码实现
* */
//创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
//根据连接工厂建立连接
Connection connection = connectionFactory.createConnection();
//启动连接
connection.start();
System.out.println("订阅者已连接MQ...");
//创建Session,参数1:是否支持事务,参数2:确认机制
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//创建Destination
Topic topic = session.createTopic(TOPIC_NAME);
//创建消费者
MessageConsumer messageConsumer = session.createConsumer(topic);
//消费消息
while (true){
TextMessage msg = (TextMessage)messageConsumer.receive();
webScoket.getHhjcJson(msg.getText());
if (msg == null){
break;
}
System.out.println("订阅者1订阅了消息:"+msg.getText());
}
//关闭连接
messageConsumer.close();
session.close();
connection.close();
System.out.println("订阅者已关闭连接...");
HashMap<Object, Object> map = new HashMap<>();
map.put("code",200);
map.put("msg","发送消息成功!");
return map;
}