我们有一个要求,即一次只需要向后端进程发送一条消息。回叫过程大约需要一个小时,只有回叫后我们才能向该过程发送另一个请求。
我正在尝试通过使用经理bpel进程来实现此目的,该进程将首先保存消息(如果后端中已经处理了某些消息),然后在意识到后端可用时将其发送。这种方法行得通,但是我们的架构师想要一个更清洁的解决方案。他建议使用JMS队列。这个想法是让jms队列一次让陌生人读取消息,仅当我们从后端接收到回调并且知道复合和bpel实例完成后,才继续转到下一个消息。我已经在互联网上搜寻了好几周,但是找不到满足我需求的基于jms的解决方案。
我已经尝试过此link的建议,但是打开订单单位和确认属性没有任何作用。
答案 0 :(得分:1)
尝试这种方法!! 使用事件驱动的bpel进程。
使用数据库标志作为下一个触发器。 (标志为TRUE)
jms适配器从队列接收第一条消息。由于您期望bpel可以长时间运行,因此在适配器上使用延迟。使用以下设置。
<binding.jca config="MyServiceInboundQueue_jms.jca">
<property name="minimumDelayBetweenMessages">10000</property>
<property name="singleton">true</property>
</binding.jca>
如果db中的flag == TRUE导致db适配器继续进行bpel进程, 否则跳过世界。
答案 1 :(得分:0)
您好,Jonar,
在我公司,我们始终使用JMS队列进行异步消息传递。您可以将延迟计时器构建为例如将复合时间设置为1小时15分钟,它在大多数情况下都可以工作,但它的效果令人感到混乱。整个想法是,将消息放入其队列目标(由JMS队列指定)时,任何异步过程都将启动。当项目组合中的JMS适配器可以自由处理队列时,它将从队列中提取消息。您的目标是将消息放在队列中,然后使用适配器从中提取消息。因为您指定了它在适配器中侦听的队列,它将知道要提取的消息。
以下约翰·布朗·埃文斯(John-Brown Evans)的博客文章阐述了第一步的整个过程。这可能有点乏味,但我发现它很有帮助。它使用的是SOa Suite 11g,而不是如今更常用的12c,但是其基本原理保持不变。
我希望这对您有用!
干杯
Jesper