内循环队列发布的替代方法

时间:2019-06-19 07:40:36

标签: java apache-camel jbossfuse

我想使用camelContext蓝图以异步方式在队列中发布数据。

完整上下文:

<camelContext id="xContext" xmlns="http://camel.apache.org/schema/blueprint">
    <route id="notifPublisher">
        <from id="notifService" uri="cxfrs:bean:xRequestService"/>
        <inOnly id="toRequestQueue" uri="activemq:queue:{{data.queue}}?jmsMessageType=Text"/>
        <setHeader headerName="Content-Type" id="setContentType"/>
    </route>
    <route id="xReceiver">
        <from id="dataqueue" uri="activemq:queue:{{data.queue}}?jmsMessageType=Text"/>
        <log id="logDataQueue_" message="Data/DatAs ${body}"/>
        <bean id="fetchUsers" method="fetchUsers" ref="dataProcessor"/>
        <bean id="checkDataInList" method="checkDataInList" ref="dataProcessor"/>
        <loop doWhile="true" id="_loop1">
            <simple>${header.mailMap} != 'EMPTY'</simple>
            <bean id="sendInQueuePerData" method="sendInQueuePerData" ref="dataProcessor"/>
            <to id="emailqueue" uri="activemq:queue:{{email.queue}}?jmsMessageType=Text"/>
        </loop>
    </route>
</camelContext>

emailQueue开始由其他emailProcessor处理。 emailProcessor正在将电子邮件发送到SMTP。

问题是DataProcessor被阻止,直到它将完成所有输入数据为止。 一旦将数据发送到队列,就不应阻止它。

1 个答案:

答案 0 :(得分:0)

您这里不需要for循环。将checkDataInList的输出传递到拆分器,然后传递到电子邮件处理器。

这将是非阻塞的,是更骆驼的做事方式。