依赖声明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
spring-boot-starter-activemq:ActiveMQ 启动器。
activemq-pool:连接池的依赖包。

Spring Boot 配置文件:

# src/main/resources/application.yml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
spring:
activemq:
# 链接地址, 采用故障转移策略
broker-url: failover:(tcp://10.10.10.127:61616,tcp://10.10.10.128:61616)?randomize=false&timeout=3000
# 连接池配置
pool:
# 开启连接池
enabled: true
# 最大的连接数, 默认值是1, 可以适当调大一些
max-connections: 8
# 连接的空闲时间, 超时则回收, 默认是30秒, 可以适当调大一些, 提高连接的重用时间
idle-timeout: 180000
# 每个连接最大的会话数, 默认是500, 可以适当调小一些
maximum-active-session-per-connection: 300
# 自定义属性
activemq:
# 队列名称
queue-name:
# 测试队列1
test1: QUEUE_TEST1
# 测试队列2
test2: QUEUE_TEST2
# 日志配置
logging:
level:
root: warn

应用配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package org.fanlychie.config;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.jms.Queue;
@Configuration
public class ApplicationConfig {
/**
* 测试队列1
*
* @param queueNameTest1 通过配置文件将自定义的值注入进来
* @return
*/
@Bean
public Queue queueTest1(@Value("${activemq.queue-name.test1}") String queueNameTest1) {
return new ActiveMQQueue(queueNameTest1);
}
/**
* 测试队列2
*
* @param queueNameTest2 通过配置文件将自定义的值注入进来
* @return
*/
@Bean
public Queue queueTest2(@Value("${activemq.queue-name.test2}") String queueNameTest2) {
return new ActiveMQQueue(queueNameTest2);
}
}
@Configuration:效果等同于 Spring XML 配置方式。该注解用于 Java 编码形式配置。

消息生产者:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package org.fanlychie.core;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
import javax.jms.Queue;
@Component
public class MessageProducer {
@Autowired
private Queue queueTest1;
@Autowired
private Queue queueTest2;
@Autowired
private JmsTemplate jmsTemplate;
/**
* 发送消息到测试队列1
*
* @param message 消息内容
*/
public void sendToQueueTest1(String message) {
jmsTemplate.convertAndSend(queueTest1, message);
}
/**
* 发送消息到测试队列2
*
* @param message 消息内容
*/
public void sendToQueueTest2(String message) {
jmsTemplate.convertAndSend(queueTest2, message);
}
}

消息消费者:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package org.fanlychie.core;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class MessageConsumer {
/**
* 接收处理测试队列1的消息
*
* @param message 消息内容
*/
@JmsListener(destination = "QUEUE_TEST1")
public void receiveQueueTest1Message(String message) {
System.out.println("====>> [QUEUE_TEST1] 收到消息:" + message);
}
/**
* 接收处理测试队列2的消息
*
* @param message 消息内容
*/
@JmsListener(destination = "QUEUE_TEST2")
public void receiveQueueTest2Message(String message) {
System.out.println("====>> [QUEUE_TEST2] 收到消息:" + message);
}
}

启动类:

1
2
3
4
5
6
7
8
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

单元测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTest {
@Autowired
private MessageProducer messageProducer;
@Test
public void doTest() {
messageProducer.sendToQueueTest1("Hello");
messageProducer.sendToQueueTest2("World");
}
}

示例项目开发环境:Java-8、Maven-3、IntelliJ IDEA-2018、Spring Boot-1.5.14.RELEASE
完整示例项目链接:spring-boot-redis-samplespring-boot-redis-sentinel-sample