Apache Camel使用HTTP定义Route

时间:2013-04-08 10:55:26

标签: apache-camel

如何使用HTTP为“from”端点定义Camel Route?

我的目标是定义一个Route,当有HTTP请求时,一条消息将被排入ActiveMQ队列。

我尝试了以下路线定义:

<route>
  <from uri="http://localhost:8181/cxf/crm/customerservice/customers" />
  <to uri="activemq:queue:LOG.ME" />
</route>

在浏览器中,我访问网址:

http://localhost:8181/cxf/crm/customerservice/customers/123

我已经验证HTTP请求已到达Web服务“customerservice”,因为我收到了来自Web服务的XML响应。但是,ActiveMQ队列中没有出现任何消​​息。

以下是处理来自ActiveMQ队列的消息的路径定义。

<route>
  <from uri="activemq:queue:LOG.ME" />
  <multicast>
    <pipeline>
      <bean ref="processor1" method="handle" />
      <to uri="mock:result" />
    </pipeline>
    <pipeline>
      <bean ref="processor2" method="handle" />
      <to uri="mock:result" />
    </pipeline>
  </multicast>
</route>

我确认没有任何东西被排入ActiveMQ,因为我的bean“processor1”和“processor2”的“handle”方法没有被执行。

如何使用HTTP为“from”端点定义Camel Route?

感谢。

2 个答案:

答案 0 :(得分:2)

如果您想收听HTTP请求,那么如果您在Web应用程序中运行,则需要使用servlet组件,或者嵌入简单http服务器的jetty组件。

两者都有很好的文档和示例。

http和http4组件仅供生产者使用(<to ... />)。

答案 1 :(得分:1)

要侦听传入的http请求,可以使用jetty或cxf组件设置代理,然后调用Web服务并将消息记录到activemq。

例如,

from("jetty:http://localhost:8282/xxx").
     to("http://localhost:8181/cxf/crm/customerservice/customers").
          to("activemq:queue:LOG.ME");

现在,要访问Web服务,可以将代理调用为http://localhost:8282/xxx,而不是直接调用Web服务。也可以使用cxf组件设置代理,它有详细记录。