我有两个 spring-boot 应用程序。在接收器应用程序的 Application.java 中我有:
@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
并在 Receiver.java 中...
@JmsListener(destination = "myQueue", containerFactory = "myFactory")
public void receiveMessage(String tradeString) throws JSONException, IOException {
tradeImpl = new ObjectMapper().readValue(tradeString, TradeImpl.class);
}
在发送者应用程序中我只需使用:
public void send(trade) {
String queueName = "myQueue";
String tradeString = new ObjectMapper().writeValueAsString(trade);
jmsTemplate.convertAndSend(queueName, tradeString);
}
所以我只是将消息发送到接收者应用程序中指定的队列名称。
我在日志中得到以下内容
无法启动 JMX 连接器无法绑定到 URL [rmi://localhost:1099>/jmxrmi]: javax.naming.NameAlreadyBoundException: jmxrmi [根异常是 java.rmi.AlreadyBoundException:
我读过以下文章,但并没有觉得它很令人鼓舞:
Spring boot - 与单独的服务共享嵌入式 JMS 代理
它的结论是:
但正如我所提到的,我之前没有使这个工作正常,并且不确定它是否可能。在 Spring Boot 文档中没有找到明确的消息,它在这种组合中不起作用。
我怀疑嵌入式 Spring Boot JMS 代理背后的想法是仅允许本地内存集成测试,而不是向外界公开嵌入式 JMS 代理。
有谁知道我想做的事情是否确实可能?如果没有,是否有关于如何使用嵌入式代理在 spring-boot 应用程序之间实现消息传递的建议?