TIBCO BW中的实现缓存
我需要在TIBCO BW中实现缓存/内存。 此缓存的内容应在BW项目中均可用。
我想做的是,当我收到包含多个装运记录的消息时-(装运和交货编号是唯一的组合)
我首先需要检查高速缓存中是否存在这些记录。 如果是,则拒绝整个XML 如果不是,则将这些数据推送到缓存/内存中。
完成此操作后,我需要调用SOAP请求回复外部系统。
在另一个项目中,当从外部系统收到确认时,我需要检查消息中的记录,找出高速缓存中的记录并将其删除。
有什么办法吗?
这里的挑战是整个消息没有唯一的密钥。每条结合运输/运送记录的记录都是唯一的。
这是我尝试并挑战的内容: 1)我想到将数据放入文件中,并将文件命名为每条消息的requestID / Key。 然后在另一个项目中,检查文件并将其删除
但是由于我们没有钥匙,所以我不能这样做。
2)使用共享变量: 我相信共享变量将无法在bw项目中使用。所以,这个选项不可用
3)第三种选择是使用EMS队列,将包含记录的消息暂时停在那里。 然后在其中搜索,如果记录匹配则拒绝该请求。
然后,在确认(另一个项目)中,在ems消息中搜索记录,并删除该特定消息。
任何帮助,将不胜感激。
谢谢
答案 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中出现问题时,缓存将被清除,您将无法检索未处理的记录。