0

在 SericeMix 启动期间,我们正在尝试使用 ServiceA 在加载捆绑包时立即调用 ServiceB。Service2 具有 activemq 端点,我们需要调用该特定服务的方法。我尝试了 bean 标记中的 spring init-method 属性,这有助于在我调用 serviceB 的方法中自动触发 ServiceA 中的方法。我得到了端点没有可用的异常之类的异常。我假设只要 Service1 启动,它就不会获得需要使用 @Produce 注释 activemq 端点初始化的 service2 的实例。相同的服务在其他正常情况下工作正常。

异常:由以下 原因引起:org.apache.camel.CamelExchangeException:端点上没有可用的消费者:端点 [direct://ServiceB]。Exchange [消息:BeanInvocation public java.lang.String java.lang.Object.toString() with null]] 在 org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:46) 在 org.apache。 camel.component.bean.CamelInvocationHandler.invoke(CamelInvocationHandler.java:64) ... 还有 35 个

我复制粘贴代码块供您参考。

public class ServiceA{

    @Produce(uri = "direct:ServiceB") //Active MQ endpoint
    private ServiceB serviceB;

     public void start()
    {
        Object obj = serviceB.getData();    }
        . . . 
        .....   
    }
  }

     **bundle-context.xml**

        //Changes for method to auto trigger during spring bean load
        <bean id="serviceA" class="com.test.serviceA" init-method="start">
        </bean>

      **bundle-context-camel.xml**

         <osgi:camelContext id="ServiceA"
    xmlns="http://camel.apache.org/schema/spring">
    <template id="producerTemplate" />

    <!-- These routes are outbound to other services -->
    <route>
        <from uri="ServiceB" />
        <bean ref="enrichOutboundExchangeRef" />
        <to uri="activemq:ServiceB?transferException=true" />
    </route>
               ..............
    </osgi:camelContext>

或者如果我需要达到这个要求,他们还有其他方式吗?我可以在 servicemix 启动期间自动加载服务(使用其他服务)。

4

3 回答 3

1

您可以使用 seda 而不是直接,因为它是基于队列的,因此消费者可以来来去去。

也尝试使用 springs 依赖属性

<bean id="serviceA" depends-on="myCamel" .../>

<osgi:camelContext id="myCamel" ...>
于 2010-12-16T16:39:57.833 回答
0

我们尝试了上述方法,但我们仍然遇到异常,我们通过在 serviceA 的初始化期间向 onCamelContextStarted() 添加一个侦听器来解决它。

谢谢拉维

于 2010-12-17T14:18:00.217 回答
0

如果您得到“端点上没有可用的消费者”,这意味着消息正在被路由到尚未初始化的端点。我建议使用它们之间的 JMS 队列来解耦这些服务。这样,serviceA 可以将消息放入队列中(独立于 serviceB 的可用性),然后 serviceB 可以在该队列准备就绪时充当对该队列的轮询消费者。

于 2010-12-21T21:15:37.337 回答