骆驼url听众

Camel url listener

我想创建一个由客户端请求触发的路由。 例如,我有一条路线 http://localhost:8080/get,其中我有一些 json 对象。 当我向 http://localhost:8080/get 发送请求以将数据发送到 ActiveMQ 时,我想创建一个路由。像事件监听器。我只想在有请求时发送到 activeMq URL。 我已经搜索过我不能在 from() 中使用 http 或 http4,这让我很头疼。我试过从计时器到 url 再到 activemq,但这不是我真正需要的。 这是我试过的。

@GetMapping(value = "/shit")
public String getIt(@RequestParam(value = "url") String url, @RequestParam(value = "activemq") String activeMq) throws Exception {
CamelContext camelContext = new DefaultCamelContext();
RouteBuilder builder = new RouteBuilder() {
  public void configure() {
    from(url).convertBodyTo(String.class)
         .process(exchange -> {
          String body = exchange.getIn()
              .getBody()
              .toString();
          System.out.println("The body is: " + body);
        })
        .pollEnrich()
        .simple("activemq://" + activeMq);
  }
};
builder.addRoutesToCamelContext(camelContext);
camelContext.start();
return "";
}

并且我希望路线在我停止之前一直处于活动状态。

是的,camel-http4 仅用于生产,不能用作消费者,因为它基于 Apache HTTP 客户端

但是您不需要像计时器或增强器这样的特殊东西。您可以只使用另一个可以充当服务器的 Camel http 组件。例如 camel-jetty

经过长时间的讨论,我终于意识到 你想 "branch off" 在你的其他已经存在的应用程序中请求 ,即你想发送一个传入请求,另外处理它们,到 ActiveMQ。

不幸的是,您不能从您的应用程序外部执行此操作,因为如果不修改那些其他应用程序,您不知道其他应用程序中的传入请求。

但是,如果您可以修改您的其他应用程序,以便它们将其有效负载发送到您的新 Camel 应用程序,那么路由将非常简单:

from("jetty:http://localhost:[port]/yourApp")
    .to("activemq:queue:myQueueName")