目录
1.ActiveMQ服务器搭建
1.1 linux环境搭建ActiveMQ服务器
在/usr下创建activemq文件,用于存放下载好的activemq压缩文件
mkdir /usr/activemq
在linux环境用wget命令下载apache-activemq-5.15.9-bin.tar.gz,官网地址点击这里
wget https://mirrors.tuna.tsinghua.edu.cn/apache//activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz
解压到当前文件
tar -zxvf apache-activemq-5.15.9-bin.tar.gz
启动ActiveMQ
cd /usr/activemq/apache-activemq-5.15.9/bin/
./activemq start
查看状态
./activemq status
在本地访问http://123.207.231.159:8161/出现以下界面表示成功,记住代码配置端口是61616,而activemq提供的UI访问端口是8161哈!
1.2 Windows环境搭建ActiveMQ服务器
在Windows下搭建ActiveMQ就简单了,先在官网下载Windows版activemq
解压到任意位置
进入C:\Users\Administrator\Desktop\apache-activemq-5.15.9\bin\win64下面直接双击activemq.bat文件出现下面终端界面访问localhost:8161看到ActiveMQ的 UI界面表示Windows搭建ActiveMQ服务器成功。
2.ActiveMQ整合springboot项目实战(PTP和Topic)
2.1ActiveMQ整合springboot项目
添加maven依赖
<!-- activemq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
在application.properties文件下添加配置
server.port=8988
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
# 等待时间
spring.activemq.close-timeout=3000
# 默认情况下activemq提供的是queue模式,若要使用topic模式需要添加如下配置
spring.jms.pub-sub-domain=true
写一个监听JMS的配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import javax.jms.ConnectionFactory;
@Configuration
public class ActiveMqConfig {
// queue模式的ListenerContainer
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setConnectionFactory(activeMQConnectionFactory);
return bean;
}
// topic模式的ListenerContainer
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setPubSubDomain(true);
bean.setConnectionFactory(activeMQConnectionFactory);
return bean;
}
}
消息发送者
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;
@Service
public class JMSProducer {
@Autowired
private JmsMessagingTemplate jmsTemplate;
/**
* PTP
* @param queueName
* @param message
*/
public void send(String queueName, String message) {
this.jmsTemplate.convertAndSend(new ActiveMQQueue(queueName), message);
}
/**
* Topic
* @param queueName
* @param message
*/
public void sendtopic(String queueName, String message) {
this.jmsTemplate.convertAndSend(new ActiveMQTopic(queueName), message);
}
}
消息接收者
import lombok.extern.slf4j.Slf4j;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class JMSConsumer {
/**
* 就收QueueOne消息queue
* @param mes
*/
@JmsListener(destination = "QueueOne", containerFactory = "jmsListenerContainerQueue")
public void resive(String mes){
log.info("收到消息{},完成!",mes);
}
/**
* 接收TopicOne消息topic
* @param mes
*/
@JmsListener(destination = "TopicOne", containerFactory = "jmsListenerContainerTopic")
public void resivetopic(String mes){
log.info("收到消息{},完成!",mes);
}
}
2.2测试
写一个控制器用于测试
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DoEveryting {
@Autowired
private JMSProducer mqProducer;
@GetMapping("/domq")
public void doJms() {
mqProducer.send("QueueOne", "来自one");
}
@GetMapping("/dotopic")
public void doJmstopic() {
mqProducer.sendtopic("TopicOne", "来自TopicOne");
}
}
本地访问 localhost:8988/domq控制台打印消息证明成功
其中topic的测试需要用两个应用测试。我这里只给大家展示了一个应用。