由于某种原因,QUEUE_A并不总是有1个交换 - 有时它有0,除非我在测试中添加一个Thread.sleep(100)。我想当完成时/当完成它实际上已经完成时完全没有完成。如何验证它是否完全完成?
multicast().parallelProcessing().to(QUEUE_A, QUEUE_B, QUEUE_C, QUEUE_D)
测试:
@Test
public void test() {
NotifyBuilder notify = new NotifyBuilder(context)
.from(QUEUE_INCOMING)
.whenCompleted(1)
.create();
template.sendBody(QUEUE_INCOMING, streamToString(loadResourceAsStream("/data/TestData.xml")));
boolean matches = notify.matches(4, SECONDS);
assertTrue("Notify failed", matches);
Thread.sleep(100); //Without this, it fails
verifyEndpoints(1, context, QUEUE_A, QUEUE_B, QUEUE_C, QUEUE_D);
}
public static void verifyEndpoints(int expectedSize, ModelCamelContext context, String... endpoints) {
for (String endpoint : endpoints) {
BrowsableEndpoint be = context.getEndpoint(endpoint, BrowsableEndpoint.class);
assertThat(String.format("Endpoint exchanges '%s' has wrong size", endpoint), be.getExchanges(), hasSize(expectedSize));
}
}
端点bean,在测试时使用ActiveMQ,但将在prod中使用WebSphere MQ:
<bean id="wmq" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost?broker.persistent=false" />
</bean>
</property>
</bean>
答案 0 :(得分:1)
问题是你在向它发送消息之后尽快浏览WMQ,因此根据代理实现和时间等,当使用JMS浏览api时,你可能看不到最后的消息。
因此,当你等待睡眠时,为什么它似乎会解决。