【问题标题】:ActiveMQ/Camel send file for further processingActiveMQ/Camel 发送文件进行进一步处理
【发布时间】:2012-04-20 03:58:56
【问题描述】:

所以我让我的 ActiveMQ 接收来自另一个位置的消息 woo hoo - 今天早上这里有快乐的舞蹈!

现在我需要在消息到达队列后对其执行后续步骤。

具体而言,根据文件名,如果可能发生这种情况,则需要将其发送到另一个队列或直接发送到另一个进程。

例如,发送一个包含有关法庭开庭变更信息的文件。我需要阅读该 XML 并更新一些本地 MySQL 表。开庭过程可以是网络服务吗?理想情况下,我只想将文件传递给该服务。

发送了另一个文件,其中包含有关已取消授权的信息,我需要将该文件中的信息发送到外部 Oracle 数据库上的存储过程。 我可以从文件名中看出该文件应该发送到的下一个进程。

所以,我正在寻找关于我最好的行动方案是为发送到我们队列的文件设置额外处理的建议?

非常感谢!!! 顺便说一句 - 我们已经订购了“ActiveMQ in Action”和“Camel in Action”,我将阅读这些内容,但现在,我们将不胜感激任何具体的新手指导。

莱斯利

【问题讨论】:

    标签: web-services activemq apache-camel


    【解决方案1】:

    Camel 的content based router 就是您要找的。它允许您根据消息正文/标题/属性设置路由规则...

    这是一个基本示例,它从入站队列中读取数据,然后根据标头简单地委托给其他队列...

       from("activemq:queue:inboundQueue")
            .choice()
                .when(header("foo").isEqualTo("bar"))
                    .to("activemq:queue:barQueue")
                .when(header("foo").isEqualTo("cheese"))
                    .to("activemq:queue:cheeseQueue")
                .otherwise()
                    .to("activemq:queue:generalQueue");
    

    除了检查邮件头外,您还可以检查正文和属性(使用simple 表达式、xpath 等)以确定正确的路由等...

    【讨论】:

    • 好的,我已经设置了 spring XML,但我想看看文件名是否包含表达式 TAHEARING~SAVE-COURTSESSION - 你能帮我解决我需要的 xPath 吗?当您说 header foo 时-它在哪里设置?我在消息中看到有标题信息,我会用该列表中的一个值替换 foo 吗?谢谢!
    • Leslie,您可以更改“foo”以引用任何标头属性...发布您的 XML 消息,我可以尝试在 xpath 方面提供帮助...
    • 我最终使用 ${file:name} 包含 'TA...' 标签,这似乎工作正常...但回来了对于您所说的属性,您是指我可以从 ActiveMQ 管理控制台看到的消息属性吗?此外,当我查看消息的控制台视图时,我在消息详细信息中看不到任何内容。原始 XML 是否仍在消息中的某处?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2015-05-26
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多