一个处理Oracle SOA JMS队列的时间

问题描述 投票:1回答:2

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

我试图通过使用一个管理器bpel进程来实现这一点,如果后端已经处理了某些事情,它将首先保存消息,然后一旦它意识到后端是空闲的就发送它。这种方法可行,但我们的架构师需要更清晰的解决方案。他建议使用JMS队列。我们的想法是让jms队列一次只能由一个amanger读取消息,一旦我们收到来自后端的回调,就会继续读到下一个消息,我们知道复合和bpel实例已经完成。我已经在互联网上搜索了好几个星期,但我无法找到适合我要求的基于jms的解决方案。

我已经尝试过对这个link的建议,但是打开订单单元和确认属性什么都不做。

oracle jms soa bpel soa-suite
2个回答
1
投票

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

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

  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. mark flag == FALSE
  4. 打电话给后端系统
  5. 一小时后收到回叫。
  6. set flag == TRUE

0
投票

嗨乔纳,

在我的公司,我们总是使用JMS队列进行异步消息传递。例如,你可以在你的复合集中使用延迟计时器构建到1小时15分钟,并且它大部分时间都可以工作,但它的麻烦很麻烦。整个想法是当消息放在其队列目标(由JMS队列指定)上时,任何异步进程都会启动。项目组合中的JMS适配器将在可以自由处理队列时从队列中获取消息。您的目标是将消息放入队列并使用适配器从中拾取消息。它将知道要拾取哪条消息,因为您指定了它在适配器中侦听的队列。

John-Brown Evans的以下博客文章解释了第一步的整个过程。这可能有点乏味,但我发现它非常有用。它使用SOa Suite 11g而不是现在比较常用的12c,但其基本原理保持不变。

Awesome JMS queue tutorial

我希望这对你有用!

干杯,

加斯帕

© www.soinside.com 2019 - 2024. All rights reserved.