我正在使用spring boot学习JMS,很高兴知道spring boot带有嵌入式Active MQ JMS代理。
我从春季页面开始就如何实现这一点,它就像魅力一样。现在我去了……
如果请求以突发形式到达,并且您希望在处理服务器崩溃之前将它们保存在某处,则可能在同一应用程序中具有发送方和接收方。您通常仍然不会使用嵌入式代理。
嵌入式代理通常仅用于测试。
但是,您可以运行可从外部访问的嵌入式代理;简单地点开一个 BrokerService 就像你一样,但另一个应用程序需要连接 tcp://... 地址,而不是 vm://... 。
BrokerService
tcp://...
vm://...
的 编辑 强>
应用1:
@SpringBootApplication @RestController public class So52654109Application { public static void main(String[] args) { SpringApplication.run(So52654109Application.class, args); } @Bean public BrokerService broker() throws Exception { final BrokerService broker = new BrokerService(); broker.addConnector("tcp://localhost:61616"); broker.setPersistent(false); broker.start(); return broker; } @Autowired private JmsTemplate template; @RequestMapping(path = "/foo/{id}") public String foo(@PathVariable String id) { template.convertAndSend("someQueue", id); return id + ": thank you for your request, we'll send an email to the address on file when complete"; } }
应用2:
application.properties
spring.activemq.broker-url=tcp://localhost:61616
和
@SpringBootApplication public class So526541091Application { public static void main(String[] args) { SpringApplication.run(So526541091Application.class, args); } @JmsListener(destination = "someQueue") public void process(String id) { System.out.println("Processing request for id"); } }
显然,对于像这样的简单应用程序,您可能只是在第一个应用程序中运行侦听器。
但是,由于此配置没有持久的消息,因此您可能会将外部代理用于生产应用程序(或启用持久性)。