2

如何为“来自”端点定义带有 HTTP 的 Camel Route?

我的目标是定义一个路由,当有 HTTP 请求时,一条消息将在 ActiveMQ 队列中排队。

我尝试了以下路由定义:

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

从浏览器中,我访问 URL:

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 的 Camel Route?

谢谢。

4

2 回答 2

3

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

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

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

于 2013-04-08T12:35:15.483 回答
2

要监听传入的 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 组件设置代理,它有据可查。

于 2013-04-09T02:06:18.943 回答