我一直在尝试使用ActiveMQ绑定端口61617而不是61616.我在我的应用程序中使用Spring并具有以下配置:
@Configuration
公共类MessagingConfiguration {
private static final String DEFAULT_BROKER_URL = "tcp://localhost:61617";
private static final String ORDER_QUEUE = "order-queue";
@Bean
public ActiveMQConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(DEFAULT_BROKER_URL);
return connectionFactory;
}
@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
template.setDefaultDestinationName(ORDER_QUEUE);
return template;
}
}
使用netstat -an | find" 61616"我看到ActiveMQ仍然绑定61616而不是61617(netstat -an | find" 61617")。关于如何使ActiveMQ使用61617的任何想法?
答案 0 :(得分:3)
此配置是告诉您的客户端使用tcp连接器连接到broker @ port 61617 而不更改代理默认端口。
AMQ默认嵌入式配置只是创建一个VM连接器,而不是tcp,你需要定义代理bean来覆盖默认配置并添加tcp连接器......:
@Bean
public BrokerService broker() throws Exception {
final BrokerService broker = new BrokerService();
broker.addConnector("tcp://localhost:61617");
broker.addConnector("vm://localhost");
return broker;
}
为什么不使用VM连接器,因为嵌入了代理?
<强>更新强>
如果要外部化您的网址或配置,您可以使用属性(amqUrl需要位于上下文使用和加载的属性文件中):
@Value("${amqUrl}")
String amqUrl;
@Bean
public BrokerService broker() throws Exception {
final BrokerService broker = new BrokerService();
broker.addConnector(amqUrl);
broker.addConnector("vm://localhost");
return broker;
}