源码下载:https://download.csdn.net/download/adam_zs/24320960
1.Windows下安装ActiveMq
参考:https://www.cnblogs.com/cocoxu1992/p/10617468.html
双击运行:D:\apache-activemq-5.16.3\bin\win64\activemq.bat 浏览器输入:http://localhost:8161/admin/index.jsp 用户名密码:admin/admin 保存用户名密码信息: D:\apache-activemq-5.16.3\conf\jetty-realm.properties 配置端口等配置信息: D:\apache-activemq-5.16.3\conf\jetty.xml |
2.搭建环境
2.1.pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.wzs.springboot</groupId>
<artifactId>springboot.activemq</artifactId>
<version>1.0.0</version>
<name>spring-boot-activemq</name>
<description>Spring Boot activemq</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.2.application.yml文件
server:
port: 8080
---
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
queue-hello: queue.hello.wzs
topic-hello: atopic.hello.wzs
2.3.项目代码
package com.wzs.springboot.activemq;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.config.SimpleJmsListenerContainerFactory;
import org.springframework.jms.core.JmsMessagingTemplate;
import javax.jms.ConnectionFactory;
import javax.jms.Queue;
import javax.jms.Topic;
/**
* @ClassName JmsBeanConfig
* @Description: 初始化配置信息
* @author wangzs
* @date 2021年9月23日下午5:17:42
* @Copyright:
*/
@Configuration
public class JmsBeanConfig {
@Value("${spring.activemq.broker-url}")
private String brokerUrl;
@Value("${spring.activemq.user}")
private String username;
@Value("${spring.activemq.password}")
private String password;
@Value("${spring.activemq.queue-hello}")
private String queueNameHello;
@Value("${spring.activemq.topic-hello}")
private String topicNameHello;
@Bean(name = "queueHello")
public Queue queue() {
return new ActiveMQQueue(queueNameHello);
}
@Bean(name = "topicHello")
public Topic topic() {
return new ActiveMQTopic(topicNameHello);
}
@Bean
public ConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory(username, password, brokerUrl);
}
@Bean
public JmsMessagingTemplate jmsMessageTemplate() {
return new JmsMessagingTemplate(connectionFactory());
}
// 在Queue模式中,对消息的监听需要对containerFactory进行配置
@Bean("queueListener")
public JmsListenerContainerFactory<?> queueJmsListenerContainerFactory(ConnectionFactory connectionFactory) {
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(false);
return factory;
}
// 在Topic模式中,对消息的监听需要对containerFactory进行配置
@Bean("topicListener")
public JmsListenerContainerFactory<?> topicJmsListenerContainerFactory(ConnectionFactory connectionFactory) {
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
}
}
package com.wzs.springboot.activemq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.jms.Destination;
import javax.jms.Queue;
import javax.jms.Topic;
/**
* @ClassName ProducerController
* @Description: 向activemq发送数据
* @author wangzs
* @date 2021年9月23日下午5:18:10
* @Copyright:
*/
@RestController
public class ProducerController {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queueHello;
@Autowired
private Topic topicHello;
@PostMapping("/queue/helloTest")
public String sendQueue(@RequestBody String str) {
this.sendMessage(this.queueHello, str);
return "success";
}
@PostMapping("/topic/helloTest")
public String sendTopic(@RequestBody String str) {
this.sendMessage(this.topicHello, str);
return "success";
}
// 发送消息,destination是发送到的队列,message是待发送的消息
private void sendMessage(Destination destination, final String message) {
jmsMessagingTemplate.convertAndSend(destination, message);
}
}
package com.wzs.springboot.activemq;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
* @ClassName QueueConsumerListener
* @Description: queue模式的消费者
* @author wangzs
* @date 2021年9月23日下午5:18:46
* @Copyright:
*/
@Component
public class QueueConsumerListener {
@JmsListener(destination = "${spring.activemq.queue-hello}", containerFactory = "queueListener")
public void readActiveQueue(String message) {
System.out.println("queue接受到:" + message);
}
}
package com.wzs.springboot.activemq;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.annotation.EnableJms;
/**
* @ClassName SpringBootActivemqApplication
* @Description: 启动spring boot
* @author wangzs
* @date 2021年9月23日下午5:19:04
* @Copyright:
*/
@SpringBootApplication
@EnableJms
public class SpringBootActivemqApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootActivemqApplication.class, args);
}
}
package com.wzs.springboot.activemq;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
* @ClassName TopicConsumerListener
* @Description: topic模式的消费者
* @author wangzs
* @date 2021年9月23日下午5:18:56
* @Copyright:
*/
@Component
public class TopicConsumerListener {
@JmsListener(destination = "${spring.activemq.topic-hello}", containerFactory = "topicListener")
public void readActiveQueue(String message) {
System.out.println("topic接受到:" + message);
}
}
3.测试
运行SpringBootActivemqApplication.java启动spring boot项目
用postman发送队列数据
控制台输出结果