【发布时间】:2019-12-09 09:56:11
【问题描述】:
我正在使用 Spring Boot 2.1.6 构建一个 REST API 应用程序。我想在我的应用程序中通过 Active MQ 包 (org.apache.activemq) 使用 JMS 消息传递。我有MyEventController 类,它通过http 请求接收各种事件。然后,我想将有关事件的信息作为 JMS 消息发送到主题,以便消息使用者使用来自事件的信息更新数据库。
我想在这里使用 JMS 的原因是不保留处理 http 请求的 Spring 线程,并让使用者打开一个单独的线程来对数据库进行可能大量耗时的更新。但是我想知道JMSTemplate 是否始终保持一个线程。因为如果为每个 http 请求打开一个新线程,那么解决方案的可扩展性就不是那么高了。
这是我的生产者代码:
@RestController
public class MyEventController {
@Autowired
private DBHandler db;
@Autowired
private JmsTemplate jmsTemplate;
@RequestMapping(method=GET, path=trackingEventPath)
public ResponseEntity<Object> handleTrackingEvent(
@RequestParam(name = Routes.pubId) String pubId,
@RequestParam(name = Routes.event) String event) {
jmsTemplate.convertAndSend("topic1", "info@example.com");
return new ResponseEntity<>(null, new HttpHeaders(), HttpStatus.OK);
}
消费者:
@Component
public class JSMListener {
@JmsListener(destination = "topic1", containerFactory = "topicListenerFactory")
public void receiveTopicMessage(String event) {
// do something...
}
}
【问题讨论】:
标签: java spring-boot spring-jms jmstemplate