当前位置: 首页 > 知识库问答 >
问题:

从多个源获取消息Apache Camel单路由

易书
2023-03-14

我需要编写一条Apache Camel路由

    null

我可以编写两条独立的路由: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");

我知道在一条路由内使用两个“from”是不可能的。但是我如何使用Apache Camel来实现这种逻辑呢?

伙计们请建议我的解决方案,我也准备用两条骆驼路由来实现这个逻辑。

共有1个答案

郏稳
2023-03-14

您可以在处理器内部使用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接收的消息正文包含要使用的文件的确切路径,例如file:/home/user/input?noop=true&fileName=file.txt。注意,您只能使用一个文件的唯一方法是使用fileName URI选项。否则您将消耗该文件夹中的所有文件。

 类似资料:
  • 我已经使用手动触发器创建了一个azure服务总线和一个新的逻辑应用程序。然后,我将“从队列获取消息(peek lock)”操作添加到应用程序中,并将最大消息数设置为“20”。 然后我在我的队列中手动创建5条新消息,然后触发我的新逻辑应用程序。然后,当我查看应用程序的执行情况时,我只看到检索到一条消息(并检查,有4条消息仍在我的队列中)。 似乎“20”的计数没有得到尊重。我还检查了我的服务总线队列的

  • 问题内容: 到目前为止,我们有一个项目结构,其中包含名为的单个源文件夹,其中包含三个模块的源代码。我想做的是: 1)编译源代码。这可以通过sourceSets定义轻松完成: 2)将编译结果放入三个jar中。我通过三个“ jar”类型的任务来做到这一点: 我现在通过三个单独的任务来执行此操作: util.jar } client.jar } server.jar } 问题是应该包含and 中不包含的

  • 我的用例是,从生产者端,它将一行数据(大约100字节)作为一条消息发布到kafka topic,从消费者端,我希望一次消费5条消息,并将其提供给我的消费者逻辑。 我做了一个简单的例子,它总是得到一个消息并打印在控制台上。请建议我任何需要的配置更改,以实现这一点。 请在下面找到源代码。 使用以下命令启动生产者 /kafka生产者性能测试——num记录500——主题测试——吞吐量10——有效负载文件测

  • 问题内容: 尽管在文件中设置了一些属性,我仍无法从Hibernate获得任何更多控制台输出(以帮助调试)。例如,添加该行实际上并没有在控制台中显示SQL语句。 我也尝试过文件的内容-如设置-没有运气。我想念什么? 编辑: hibernate-service.xml文件的内容是 不过,我不确定100%是否真的有效。该XML文件位于处理我的数据库内容的Eclipse项目中,但似乎不在JBoss dep

  • 注意:我使用的是discord.jsV11,我知道我打算下个月在我解开我的意大利面条代码之后将它更新到V12。 所以我不知道如何从一条消息中获取messageID,而这条消息已经在机器人中引发了反应。 我希望它的工作方式如下:一个用户对一个消息做出反应,任何消息,反应在bot中编程。然后,bot获取给出该反应的消息url,然后向发送消息。 所以我尝试使用这段代码,但真的无法达到我需要达到的目的:

  • 如何从动物园管理员那里获得最后一次偏移时间?当使用Storm喷口阅读来自Kafka的消息时。上下文:Kafka 不断获取消息,使用者读取一段时间,然后由于任何原因关闭,然后使用者仅读取最新消息,但不读取上次偏移量读取