我需要写一个 Apache Camel 路由到

  • 从 Active-MQ JMS-Queue 接收消息(包含文件位置)。
  • 使用来自 JMS-Queue 的接收消息中的位置读取文件内容。
  • 将该文件内容发送到另一个 Active-MQ JMS-Queue。

  • 我可以写两个单独的路由 1) 从 Active-MQ 和
    2)使用静态文件名从文件夹中的文件中读取并发送到JMS-queue。
    但我的要求是仅从这些文件中读取内容,我从 JMS 队列中获取详细信息。意味着从文件中读取内容是有选择性的并基于条件。

    以下是我需要的示例 Java DSL 路由配置。
    from("activemq:queue:filelocationQueue")
     .from("file://<<File-Location from JMS-Queue>>?noop=true")
       .convertBodyTo(String.class)
          .to("activemq:queue:fileContent");
    

    我知道不可能在路线内使用两个“来自”。但是我怎样才能使用 Apache Camel 放置这种逻辑呢?

    伙计们请给我建议解决方案,我也准备使用两条 Camel 路线来实现这个逻辑。

    最佳答案

    您可以在 Processor 中使用 Camel 的 ConsumerTemplate 来获得您需要的内容,如下所示:

        from("activemq:queue:filelocationQueue")
        .process(new Processor() {
    
            public void process(Exchange exchange) throws Exception {
    
                // "file://<<File-Location from JMS-Queue>>?noop=true"
                String fileLocation = exchange.getIn().getBody(String.class);
    
                ConsumerTemplate template = getContext().createConsumerTemplate();
                // This is like your second "from". Use 2 second timeout (2000 ms).
                Exchange fileExchange = template.receive(fileLocation,2000);
                exchange.getOut().setBody(fileExchange.getIn().getBody());
                template.doneUoW(fileExchange);
            }
        })
        .convertBodyTo(String.class, "UTF-8")
        .to("activemq:queue:fileContent");
    

    以上假设从 filelocationQueue 接收的消息正文包含要使用的文件的确切路径,例如文件:/home/user/input?noop=true& 文件名 =file.txt。请注意,只能使用一个文件的唯一方法是使用 fileName URI 选项。否则,您将消耗该文件夹中的所有文件。

    关于apache-camel - Apache Camel 单路由从多个源获取消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32485555/

    10-13 03:29