Salesforce平台事件与ComeTd Client重复的事件

问题描述

我已经使用CometD Java构建了Salesforce platform event client,这与forcedotcom提供的示例EMP-Connector类似。

我在OpenShift云上安装了此客户端,并且我的应用运行了2个Pod。我面临的问题是,由于有两个Pod,并且每个Pod运行相同的docker映像,因此两者都获得相同的事件。这意味着重复事件。 据我了解,Salesforce平台事件的行为应类似于Kafka订阅者。

我无法找到有关如何避免获取相同事件副本的解决方案。这里的任何建议将对您有很大的帮助。

注意:到目前为止,我已经能够创建客户端解决方案,该解决方删除事件的重复副本。这不是最佳解决方案。 我必须至少用2个Pod运行我的应用程序。那是我在云上的限制。

解决方法

这是预期的/设计使然。在CometD中,当消息在广播频道上发布时,所有在此频道上收听的订户将收到此消息的副本。广播频道的行为类似于消息传递主题,其中一个发件人希望将相同的信息发送给多个收件人。 CometD中还有其他类型的通道,它们具有不同的语义。广播通道和一对多消息的语义是通过Salesforce中的CometD提供的平台事件所获得的。

在您的情况下,听起来您有多个订阅者,因此您所看到的是预期的。完成后,您可以在客户端对消息流进行重复数据删除,也可以更改体系结构,以便获得单个订阅。