从JUnit测试用例调用部署在远程服务器中的Camel端点

时间:2011-09-24 11:36:18

标签: java spring apache-camel

我是Camel的新手,必须在很短的时间内发布模块。我的问题可能是一个非常基本的问题,但如果有人可以指导我,我真的很感激。

要求是从jUnit测试用例调用部署在Tomcat服务器中的Camel端点服务。服务已经注入了CamelContext,它有一组需要调用的公开方法。我们在项目中使用Spring 2.5和Camel 2。 Spring配置在

之下
<bean name="/DispatcherService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
    <property name="service" ref="dispatcherService">
    <property name="serviceInterface" value="test.DispatcherService">
</bean>

<camelContext id="dispatcherCamelContext" trace="true" xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="direct:dispatcherChannel" />
            <!-- use comma as a delimiter for String based values -->
            <recipientList delimiter=",">
                <header&gt;serviceEndpoints&lt;/header>
            </recipientList>
    </route>
</camelContext>

<bean id="dispatcherService" class="test.DispatcherServiceImpl">
    <property name="context" ref="dispatcherCamelContext" />
</bean>

我无法找到的是如何从使用Spring配置的jUnit中调用部署在tomcat服务器(http:// someIP:8080)中的端点URI direct:dispatcherChannel

3 个答案:

答案 0 :(得分:1)

您不能这样做,因为direct:端点表示直接方法调用(即您需要与应用程序处于同一进程中)。为了能够从测试中调用direct:个端点,您需要在测试中启动CamelContext。显然,只有当您需要测试不同的路径或者您的上下文非常小时,才能使用它。

与已部署的应用程序交互的测试应被视为集成/系统测试。您可以为这些方案编写JUnit测试,但是您应该通过公开的接口(http:端点等)与应用程序进行交互。

答案 1 :(得分:1)

“直接”端点只能在同一个VM中访问。如果您需要在外部访问路线,可以使用JMX或使用JMSHTTP将其换行到其他路线。这两种方法都允许您手动测试/调试已部署的路由......

  • 使用JMX,您只需要导航到您的Camel Context MBean(使用jconsole等)并执行sendBody(“direct:dispatcherChannel”,“test message”)操作

  • 用HTTP包装路由,只需添加此路由,然后在浏览器中转到此URL以调用路由...

    from("jetty:http://0.0.0.0:9001/invokeDispatcherChannel")
    .to("direct:dispatcherChannel");
    
  • 如果需要发送有效负载,可以考虑通过JMS(或WS等)公开路由,并在调用路由之前转换为预期的格式。然后你可以在队列中删除一条消息(使用JMX,AMQ web console等)来调用直接路由。

    from("activemq:queue:invokeDispatcherChannel")
    .process(new MyMessageConverterProcessor())
    .to("direct:dispatcherChannel");
    

答案 2 :(得分:0)

由于您已将camel上下文注入test.DispatcherServiceImpl,因此您只需使用camel ProducerTemplate将请求发送到“direct:dispatcherChannel”,就像这样。