在TIBCO BW中实施缓存

时间:2019-06-20 02:58:13

标签: caching tibco tibco-ems tibco-business-works

TIBCO BW中的实现缓存

我需要在TIBCO BW中实现缓存/内存。 此缓存的内容应在BW项目中均可用。

我想做的是,当我收到包含多个装运记录的消息时-(装运和交货编号是唯一的组合)

  1. 我首先需要检查高速缓存中是否存在这些记录。 如果是,则拒绝整个XML 如果不是,则将这些数据推送到缓存/内存中。

  2. 完成此操作后,我需要调用SOAP请求回复外部系统。

  3. 在另一个项目中,当从外部系统收到确认时,我需要检查消息中的记录,找出高速缓存中的记录并将其删除。

有什么办法吗?

这里的挑战是整个消息没有唯一的密钥。每条结合运输/运送记录的记录都是唯一的。

这是我尝试并挑战的内容: 1)我想到将数据放入文件中,并将文件命名为每条消息的requestID / Key。 然后在另一个项目中,检查文件并将其删除

但是由于我们没有钥匙,所以我不能这样做。

2)使用共享变量: 我相信共享变量将无法在bw项目中使用。所以,这个选项不可用

3)第三种选择是使用EMS队列,将包含记录的消息暂时停在那里。 然后在其中搜索,如果记录匹配则拒绝该请求。

然后,在确认(另一个项目)中,在ems消息中搜索记录,并删除该特定消息。

任何帮助,将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

第四个选项是使用tibco活动“ Java全局实例”在Java中实现缓存。

  

“ Java全局实例共享配置资源使您能够   指定可以在所有流程实例之间共享的Java对象   在Java虚拟机(JVM)中。当流程引擎启动时,   指定的Java类的实例被构造。”

您可以使用Java搜索Google的大量缓存实现,例如https://crunchify.com/how-to-create-a-simple-in-memory-cache-in-java-lightweight-cache/

关于您的声明: “这里的挑战没有整个消息的唯一键。每条记录的发货/交付记录都是唯一的”

因此,您确实有唯一的密钥-装运/交货的组合是唯一的。 如果记录大小不是太大,则可以按原样使用记录作为键,或者为每个记录创建唯一的哈希,如果键大小有问题,可以将其用作键。

答案 1 :(得分:0)

为什么不使用数据库或文件存储记录? 因为当您停止或重新启动或appnode中出现问题时,缓存将被清除,您将无法检索未处理的记录。