首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ServiceMix 4.3启动时加载服务,该服务使用ActiveMQ/Apache Camel使用另一个服务

在ServiceMix 4.3启动时加载服务,该服务使用ActiveMQ/Apache Camel使用另一个服务
EN

Stack Overflow用户
提问于 2010-12-14 23:15:29
回答 3查看 1K关注 0票数 0

我们尝试使用ServiceA在SericeMix启动期间一加载捆绑包就调用ServiceB。Service2有了activemq端点,我们需要调用该特定服务的方法。我尝试使用bean标记中的spring init-method属性来帮助自动触发ServiceA中的方法,因为我正在调用serviceB的方法。我得到了异常,如没有消费者可用于端点。我假设一旦Service1启动,它就不会获得需要使用@Produce注解activemq端点进行初始化的service2实例。相同的服务在其他正常情况下工作得很好。

异常:由: org.apache.camel.CamelExchangeException: Endpointdirect://ServiceB上没有可用的使用者引起。在org.apache.camel.component.bean.CamelInvocationHandler.invoke(CamelInvocationHandler.java:64)的org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:46):ExchangeMessage: BeanInvocation public java.lang.String java.lang.Object.toString() with null] ... 35更多

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

代码语言:javascript
复制
public class ServiceA{

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

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

     **bundle-context.xml**

代码语言:javascript
复制
        //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**

代码语言:javascript
复制
         <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启动期间自动加载服务(使用其他服务)。

EN

回答 3

Stack Overflow用户

发布于 2010-12-17 00:39:58

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

还可以尝试使用springs depends on属性

代码语言:javascript
复制
<bean id="serviceA" depends-on="myCamel" .../>

<osgi:camelContext id="myCamel" ...>
票数 1
EN

Stack Overflow用户

发布于 2010-12-17 22:18:00

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

谢谢Ravi

票数 0
EN

Stack Overflow用户

发布于 2010-12-22 05:15:37

如果您得到“没有使用者在端点上可用”,这意味着消息正被路由到一个尚未初始化的端点。我建议在它们之间使用JMS队列来解耦服务。通过这种方式,serviceA可以将消息放入队列(独立于serviceB的可用性),并且serviceB可以在队列就绪时充当该队列的轮询使用者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4440610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档