我是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>serviceEndpoints</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
。
答案 0 :(得分:1)
您不能这样做,因为direct:
端点表示直接方法调用(即您需要与应用程序处于同一进程中)。为了能够从测试中调用direct:
个端点,您需要在测试中启动CamelContext
。显然,只有当您需要测试不同的路径或者您的上下文非常小时,才能使用它。
与已部署的应用程序交互的测试应被视为集成/系统测试。您可以为这些方案编写JUnit
测试,但是您应该通过公开的接口(http:
端点等)与应用程序进行交互。
答案 1 :(得分:1)
“直接”端点只能在同一个VM中访问。如果您需要在外部访问路线,可以使用JMX或使用JMS或HTTP将其换行到其他路线。这两种方法都允许您手动测试/调试已部署的路由......
使用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”,就像这样。