apache camel路由队列问题

时间:2014-06-12 16:21:59

标签: spring routing apache-camel activemq message-queue

我试图创建一个从浏览器获取信息并将其放入队列的应用程序。然后从队列中获取该数据并通过应用程序发送以确保安全性。安全应用程序应该在单独的操作应用程序完成后将其放入不同的队列中。

有人可以帮我一起路由吗?基本上,我正在寻找的路线是:

浏览器/用户界面 - > Qnonsecure - >安全应用 - > QSecure - >动作应用

我现在理解的是:

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="jms:queue:QnonSecure"/>
        <to uri="jms:queue:QSecure"/>
    </route>
</camelContext>

如何将其更改为与应用程序之间的路由。  如何将浏览器的输入发送到QnonSecure?另外,在我的代码中,我在QnonSecure和QSecure之间调用安全应用程序?

1 个答案:

答案 0 :(得分:2)

有多种可能的解决方案。采取以下路线作为起点:

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="restlet:http://localhost:8081/myApp?restletMethod=post"/>
        <to uri="jms:queue:QnonSecure" pattern="InOut" />
        <enrich uri="direct:securityApp"/>
        <choice>
            <when>
                <simple>${header.myHeader} == "SECURE"</simple>
                <to uri="jms:queue:QSecure" pattern="InOut" />
                <to uri="direct:actionApp" />
            </when>
            <otherwise>
                <!-- handle non valid requests -->
            </otherwise>
        </choice>
    </route>
</camelContext>

步骤:

  1. 浏览器向Camel restlet组件发送POST请求。这可以通过JavaScript,链接和/或只是普通的提交按钮来完成。
  2. 正文被发送到jms:queue:QnonSecure。当我们使用InOut模式时,这是以同步方式完成的,并且获取响应。
  3. jms:queue:QnonSecure的响应会发送到测试凭据的direct:securityApp。如果它们正确,标题myHeader将设置为SECURE(或任何其他值)。
  4. choice语句中,myHeader已经过测试。在安全的情况下,调用jms:queue:QSecure和最后direct:actionApp