【问题标题】:One at a Time Processing for Oracle SOA JMS QueueOracle SOA JMS 队列的一次处理
【发布时间】:2019-07-01 07:35:48
【问题描述】:

我们需要一次只向后端进程发送一条消息。这个流程的回调大约需要一个小时左右,只有在回调之后我们才能向该流程发送另一个请求。

我正在尝试通过使用管理器 bpel 进程来实现这一点,如果后端已经有正在处理的内容,该进程将首先保存消息,然后在它意识到后端空闲时发送它。这种方法可行,但我们的架构师想要一个更清洁的解决方案。他建议使用 JMS 队列。这个想法是让 jms 队列中的消息一次由一个 amanger 读取,只有在我们收到来自后端的回调并且我们知道复合和 bpel 实例已完成时才移动到下一个。我已经在互联网上搜索了数周,但我找不到满足我要求的基于 jms 的有效解决方案。

我已经尝试了这个link 的建议,但是打开顺序单元和确认属性没有任何作用。

【问题讨论】:

    标签: oracle jms soa bpel soa-suite


    【解决方案1】:

    试试这个方法!! 使用事件驱动的 bpel 流程。

    使用数据库标志作为您的下一个触发器。 (标志为真)

    1. jms 适配器从队列中接收到第一条消息。这里使用适配器中的延迟,因为您希望 bpel 长时间运行。使用以下设置。

      <binding.jca config="MyServiceInboundQueue_jms.jca"> <property name="minimumDelayBetweenMessages">10000</property> <property name="singleton">true</property> </binding.jca>

    2. 如果 db 中的 flag == TRUE 会导致 db 适配器继续执行 bpel 进程, 否则跳过 bpel。

    3. 标记标志==FALSE
    4. 调用后端系统
    5. 一个小时后收到回电。
    6. 设置标志==TRUE

    【讨论】:

      【解决方案2】:

      你好乔纳,

      在我的公司,我们总是将 JMS 队列用于异步消息传递。例如,您可以在复合设置中使用延迟计时器构建为 1 小时 15 分钟,它在大多数情况下都可以工作,但它会很混乱。整个想法是让任何异步进程在将消息放在其队列目标(由 JMS 队列指定)上时启动。项目组合中的 JMS 适配器将在空闲处理队列时从队列中提取消息。您的目标是将消息放入队列并使用适配器从中提取消息。它会知道要接收哪条消息,因为您指定了它在适配器中侦听的队列。

      John-Brown Evans 的以下博客文章从第一步开始阐述了整个过程。这可能有点乏味,但我发现它很有帮助。它使用 SOa Suite 11g 而不是现在更常用的 12c,但其基本原理保持不变。

      Awesome JMS queue tutorial

      我希望这对你有用!

      干杯,

      杰斯帕

      【讨论】:

        猜你喜欢
        • 2015-12-10
        • 2015-09-18
        • 2021-04-29
        • 2017-03-16
        • 1970-01-01
        • 2018-09-10
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        相关资源
        最近更新 更多