Spring集成ActiveMQ,封装ActiveMqService

ActiveMQ是一个非常流行的消息队列服务中间件,基于JMS(Java Message Service)规范,并且它是一个纯Java程序,运行环境只需要Java虚拟机。Spring集成ActiveMQ只需简单配置,本文进一步分享封装的ActiveMqService服务。


代码文件

功能要点

SpringBoot集成ActiveMQ

pom.xml

引入ActiveMQ依赖spring-boot-starter-activemq

application.yml

配置ActiveMQ服务器broker-url, user, passworkd

ActiveMqConfig.java

配置Bean: ActiveMQQueue, ActiveMQTopic, 还有JmsListenerContainerFactory

封装ActiveMQ服务

ActiveMqService.java

调用ActiveMQ发送消息:JmsMessagingTemplate.convertAndSend()发送Queue和Topic

接收处理消息

ActiveMqConsumer.java

接收ActiveMQ消息,@JmsListener()声明处理函数

单元测试

ActiveMqServiceTest.java

测试封装的ActiveMQ发送接收功能

功能调用

CheckController.java

增加REST接口/chk/mq,调用ActiveMQ发送消息

 

代码

Github下载:https://github.com/jextop/StarterApi/

 

SpringBoot集成ActiveMQ

1. 新建SpringBoot项目时,选中ActiveMQ,将自动添加ActiveMQ依赖。

 image.png

2. 已有SpringBoot项目,可以在pom.xml中直接引用ActiveMQ Starter:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

3. application.yml中配置ActiveMQ服务器信息:

spring:
  activemq:
  broker-url: tcp://127.0.0.1:61616
  user: admin
  password: admin
  in-memory: false
  packages:
    trust-all: true
  pool:
    enabled: false

 

调用ActiveMQ发送消息,封装服务ActiveMqService.java

1. JmsMessagingTemplate发送消息

a) send()

b) convertAndSend()

c) sendAndReceive(),发送并且等待回复

d) receive(),等待回复

2. Queue发送点对点消息

3. Topic发送订阅消息

 

接收处理ActiveMQ消息,ActiveMqConsumer.java

@JmsListener()声明处理函数

@Component
public class ActiveMqConsumer {
    @JmsListener(destination = "starter.queue")
    public void listenQueue(String msg) {
        LogUtil.info("Receive queue msg", msg);    }

    @JmsListener(destination = "starter.topic", containerFactory = "jmsTopicListenerContainerFactory")
    public void listenTopic(String msg) {
        LogUtil.info("Receive topic msg", msg);
    }
}

 

单元测试ActiveMqServiceTest.java

@SpringBootTest
public class ActiveMqServiceTest {
    @Autowired
    ActiveMqService activeMqService;

    @Test
    public void testSendQueue() {
        activeMqService.sendQueue(String.format("test active queue: %s", new Date().toString()));
    }

    @Test
    public void testSendTopic() {
        activeMqService.sendTopic(String.format("test active topic: %s", new Date().toString()));
    }
}

 

功能调用

1. 增加RestController:CheckController.java

2. 增加REST接口/chk/mq,调用ActiveMQ发送消息

@GetMapping(path = "/chk/mq")
public Object mq(@RequestAttribute(required = false) String ip) {
    String msg = String.format("check mq, %s, %s 消息队列", ip, new Date().toString());
    activeMqService.send(msg);

    return new HashMap<String, Object>() {{
        put("chk", "mq");
        put("msg", msg);
    }};
}

 

REST接口调用ActiveMqService示例

image.png

猜你喜欢

转载自blog.51cto.com/13851865/2468496
今日推荐