我们需要一次只向一个后端进程发送一条消息。此过程的回调大约需要一个小时,只有在回调之后我们才能向流程发送另一个请求。
我试图通过使用一个管理器bpel进程来实现这一点,如果后端已经处理了某些事情,它将首先保存消息,然后一旦它意识到后端是空闲的就发送它。这种方法可行,但我们的架构师需要更清晰的解决方案。他建议使用JMS队列。我们的想法是让jms队列一次只能由一个amanger读取消息,一旦我们收到来自后端的回调,就会继续读到下一个消息,我们知道复合和bpel实例已经完成。我已经在互联网上搜索了好几个星期,但我无法找到适合我要求的基于jms的解决方案。
我已经尝试过对这个link的建议,但是打开订单单元和确认属性什么都不做。
尝试这种方法!!使用事件驱动的bpel流程。
使用数据库标志作为下一个触发器。 (标志为TRUE)
<binding.jca config="MyServiceInboundQueue_jms.jca">
<property name="minimumDelayBetweenMessages">10000</property>
<property name="singleton">true</property>
</binding.jca>
嗨乔纳,
在我的公司,我们总是使用JMS队列进行异步消息传递。例如,你可以在你的复合集中使用延迟计时器构建到1小时15分钟,并且它大部分时间都可以工作,但它的麻烦很麻烦。整个想法是当消息放在其队列目标(由JMS队列指定)上时,任何异步进程都会启动。项目组合中的JMS适配器将在可以自由处理队列时从队列中获取消息。您的目标是将消息放入队列并使用适配器从中拾取消息。它将知道要拾取哪条消息,因为您指定了它在适配器中侦听的队列。
John-Brown Evans的以下博客文章解释了第一步的整个过程。这可能有点乏味,但我发现它非常有用。它使用SOa Suite 11g而不是现在比较常用的12c,但其基本原理保持不变。
我希望这对你有用!
干杯,
加斯帕