Apache camel 驼峰JMS组件,如何获取订阅回调?

Apache camel 驼峰JMS组件,如何获取订阅回调?,apache-camel,jms,ibm-mq,Apache Camel,Jms,Ibm Mq,我正在开发一个服务,需要使用Camel JMS 2.17.0动态订阅JMS队列 因此,我在运行时使用bean创建侦听路由: // Bean: createCustomListenerNow String endpoint = "jms:queue:" + queueName + "&testConnectionOnStartup=true&exceptionListener=#listenerBuilder"; // camelConte

我正在开发一个服务,需要使用Camel JMS 2.17.0动态订阅JMS队列

因此,我在运行时使用bean创建侦听路由:

// Bean: createCustomListenerNow
String endpoint = "jms:queue:" + queueName +
                    "&testConnectionOnStartup=true&exceptionListener=#listenerBuilder";

// camelContext.addRoutes uses this RouteBuilder
@Override
public void configure() throws Exception {
    from(endpoint)
            .id(id)
            .to("seda:processReply");
}
我的实际代理是Websphere MQ,如果我的帐户没有正确的权限,我可能会遇到异常。不幸的是,这发生在我的路线建成后

我的路线是这样的:

<route>
    <from uri="direct:mock" />
    <to uri="bean:createCustomListenerNow" /> <!-- I want to block here until subscription is OK -->
    <to uri="bean:doSomethingThatRequiresTheListenerToBeProperlyRunning" />
</route>

在JMS组件创建新连接并成功订阅之前,是否有一种方法可以“阻止”?我没有设法找到一个回调或一个简单的方法来获取这些信息


我现在要做的是注册一个
javax.jms.ExceptionListener
并等待JMSException。如果在超时之前没有引发异常,我想订阅成功了。
我不认为这种方法是坚如磐石,任何建议都是值得赞赏的


在我收到侦听器上的消息之前,我无法阻止,因为它可能会在数小时后到达,我需要用“侦听器设置正常”或“侦听器设置失败”之类的答复来完成当前交换。

Alessandro,看起来您希望仅在满足某个前提条件(可以连接到QM)时才开始路由。您可以尝试实施一个路由策略,检查您是否可以连接到QM,并且只有在该策略有效的情况下,才开始您的路由。@SebastianBrandt我喜欢您的想法。我的先决条件是订阅队列。因此,我需要订阅一个事务,回滚该事务,并让Camel设置新的route/JMS侦听器。我要做些实验。