ActiveMQ + Spring绑定端口61617

时间:2017-03-17 14:59:49

标签: spring activemq

我一直在尝试使用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的任何想法?

1 个答案:

答案 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;
}