我已实施集群& HA有两个rabbitMQ节点。
我正在尝试使用Spring-AMQP连接我的群集,如下所示:
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses("rabbit1:5672,rabbit2:5672");
它也可以。
现在我开始编写单元测试用例,但我无法在测试文件中获取这些地址。 Spring中没有getter方法可以获取这些地址(我使用的是Spring 4.2.1)。
我也尝试执行connectionFactory.getHost()
,但它也无法正常工作。
有没有办法使用ConnectionFactory获取这些地址(我可以在单元测试文件中捕获并放大它们)?
答案 0 :(得分:0)
不确定将addresses
提取为变量甚至外部属性并使用它两次的问题:在CachingConnectionFactory
bean定义和测试用例中。
我的意思是这样的(例如application.properties
):
rabitmq.addresses=rabbit1:5672,rabbit2:5672
在@Configuration
:
@Bean
CachingConnectionFactory connectionFactory(@Value("rabitmq.addresses") addresses) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses(addresses);
return connectionFactory;
}
在测试用例中:
@Value("rabitmq.addresses")
private String addresses;
<强>更新强>
在Spring AMQP测试中我们喜欢这样:
@Test
public void setAddressesTwoHosts() throws Exception {
ConnectionFactory mock = mock(com.rabbitmq.client.ConnectionFactory.class);
CachingConnectionFactory ccf = new CachingConnectionFactory(mock);
ccf.setAddresses("mq1,mq2");
ccf.createConnection();
verify(mock).newConnection(isNull(ExecutorService.class),
aryEq(new Address[] { new Address("mq1"), new Address("mq2") }));
verifyNoMoreInteractions(mock);
}