BW经常要侦听queue,接收到信息后启动process进行处理。有两种mode是BW比较常用并且容易出现问题的: TIBCO EMS Explicit Client Acknowledge 和Client。其中前者是使用Tibco EMS才可以使用的,为方便我们简称为Tibco, 两种方式都需要在随后的Process流程中使用Confirm Activity才能把信息从信息从队列中清除。
使用Tibco这种方式如果由于某种原因没有Confirm, 所有同一session中delive的信息都会重新delive。比如队列中有5条信息并且编号分别为1,2,3,4,5,Tibco会启动5个实例分别来处理这5个信息。假如1首先完成但没有confirm(例如异常没有被捕捉或bug),这时这5条信息会被重新delive并且5个新的实例会被启动,加上原来的4个,就共有9(5+4)个实例在运行了!
如果使用Client这种Acknowledge mode, 要在designer里填入max session(比如输入10)的值,个人觉得这应该是运行时所允许的最大实例数目。同样上述的情况下,只有没有被confirm的信息会被重新delive,也就是说会有5(1+4)个实例在运行。在这种模式下你会发现有10个侦听器会在队列上面。
总而言之无论何种情况,包括发生任何异常porcess都应该能够捕捉并处理,使得confirm能够把信息从队列中清除。更重要的是对于Tibco Acknowledge这种模式你可以在发布应用时指定或不指定最大实例数,垃圾信息驻留在队列中也是bug.