springboot+activemq搭建
一、工程目录
二、源码
(1)父类pom文件
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>springboot</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>platform</module>
</modules>
<name>springboot</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<properties>
<main.basedir>${basedir}</main.basedir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
<project.deploy.directory>${basedir}/target</project.deploy.directory>
<mybatis-spring-boot.version>1.3.1</mybatis-spring-boot.version>
<druid.version>1.0.26</druid.version>
</properties>
<dependencyManagement>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
(2)子类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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot</artifactId>
<groupId>com.demo</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>platform</artifactId>
<name>platform</name>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot.version}</version>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- druid 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<!-- 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>
</dependencies>
<build>
<plugins>
<!-- 该插件为Spring Boot应用提供了执行Maven操作的 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 打包后的输出路径 -->
<outputDirectory>${project.deploy.directory}</outputDirectory>
</configuration>
</plugin>
<!-- 编译插件,用于指定编译的jdk版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<!-- 将当前项目打包为Jar包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
<!-- 用于定制化打包方式 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>config-zip</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<skipAssembly>false</skipAssembly>
<!-- 打包输出路径 -->
<outputDirectory>${project.deploy.directory}</outputDirectory>
<!-- 描述符文件,用于描述那些文件需要被打包 -->
<descriptor>src/main/assembly/config-zip.xml</descriptor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
(3)application.property
spring.application.name=springboot_demo
#tomcat访问上下文路径
server.context-path=/springboot_demo
#指定tomcat端口
server.port=8090
#指定tomcat的编码格式
server.tomcat.uri-encoding=UTF-8
#配置字符集过滤器
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
#activemq
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
#开启发布/订阅功能,默认为false,也就是queue
spring.jms.pub-sub-domain=true
#连接池
spring.activemq.pool.enabled=true
#最大连接数
spring.activemq.pool.max-connections=50
(4)JmsConfig文件
@Configuration
@EnableJms // 扫描activemq的监听器
public class JmsConfig {
// topic模式的ListenerContainerFactory
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerFactoryTopic(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
// queue模式的ListenerContainerFactory
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerFactoryQueue(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
// 消息转换器
@Bean
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
}
(5)生产者
@Component
public class Producer {
@Autowired
private JmsTemplate jmsTemplate;
public void sendMessageTopic(String message) {
jmsTemplate.convertAndSend("test.topic", message);
}
// String类型
public void sendMessageQueue(String message) {
jmsTemplate.convertAndSend("test.queue", message);
}
// 自定义对象
public void sendMessageQueue(Person data) {
jmsTemplate.convertAndSend("test.queue.two", data);
}
// Map类型
public void sendMessageQueue(Map<String, Object> map) {
jmsTemplate.convertAndSend("test.queue.three", map);
}
}
(6)消费者
@Component
public class Consumer {
@JmsListener(destination = "test.queue",containerFactory = "jmsListenerContainerFactoryTopic")
public void receiveMessageQueue(String message) {
System.out.println("======== " + message + " =========");
}
@JmsListener(destination = "test.queue.two",containerFactory = "jmsListenerContainerFactoryTopic")
public void receiveMessageQueue(Person person) {
System.out.println("======== " + person.toString() + " =========");
}
@JmsListener(destination = "test.queue.three",containerFactory = "jmsListenerContainerFactoryTopic")
public void receiveMessageQueue(Map<String, Object> map) {
System.out.println("=================");
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
System.out.println("==================");
}
@JmsListener(destination = "test.topic",containerFactory = "jmsListenerContainerFactoryTopic")
public void receiveMessageTopic(String message) {
System.out.println("========= topic first:" + message + " =========");
}
@JmsListener(destination = "test.topic",containerFactory = "jmsListenerContainerFactoryTopic")
public void receiveMessageTopic2(String message) {
System.out.println("========= topic second:" + message + " =========");
}
}
三、最后
启动activemq,再启动项目