如何解决Web 应用程序和 ActiveMQ Artemis 之间通过 VM 协议通信的问题
我有一个 docker 容器,我在其中部署了一个 Web 应用程序和一个 ActiveMQ Artemis 代理作为单个 Jetty 实例上的战争文件。通过 TCP 的通信按预期工作,但通过 VM 协议没有任何反应。 应用程序是否以某种方式分离?
broker.xml
:
<connectors>
<connector name="in-vm-connector">vm://0</connector>
<connector name="connector">tcp://localhost:61616</connector>
</connectors>
<acceptors>
<acceptor name="in-vm-acceptor">vm://0</acceptor>
<acceptor name="acceptor">tcp://localhost:61616</acceptor>
</acceptors>
编辑:
Creating the broker
public class EmbeddedBroker implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
SecurityConfiguration securityConfig = new SecurityConfiguration();
securityConfig.addUser("guest","guest");
securityConfig.addRole("guest","guest");
securityConfig.setDefaultUser("guest");
ActiveMQJAASSecurityManager securityManager = new ActiveMQJAASSecurityManager(InVMLoginModule.class.getName(),securityConfig);
// Step 2. Create and start embedded broker.
try {
ActiveMQServer server = ActiveMQServers.newActiveMQServer("broker.xml",null,securityManager);
server.start();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {}
}
Creating a connection with the broker
@Bean
ActiveMQConnectionFactory activeMqConnectionFactory(@Value("${" + BROKER_URL + "}") String brokerUrl,@Value("${" + BROKER_USERNAME + "}") String username,@Value("${" + BROKER_PASSWORD + "}") String password) {
return new ActiveMQConnectionFactory(brokerUrl,username,password);
}
@Bean
MessageListener messageListener(RequestHandler requestHandler) {
return new JmsChannel(requestHandler);
}
@Bean
DefaultMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory,MessageListener messageListener,@Value("${" + CONSUMER_QUEUE + "}") String consumerQueueName) {
var listenerContainer = new DefaultMessageListenerContainer();
listenerContainer.setConnectionFactory(connectionFactory);
listenerContainer.setDestinationName(consumerQueueName);
listenerContainer.setMessageListener(messageListener);
listenerContainer.setSessionTransacted(true);
return listenerContainer;
}
@Bean
JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
var jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.setReceiveTimeout(10000);
return jmsTemplate;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。