我正在使用 cometd 来监听 Salesforce 中生成的平台事件。我的 cometd 客户端配置代码如下所示
this.client.configure({
url: `${this.org.instance_url}/cometd/46.0`,
requestHeaders: {
Authorization: `Bearer ${salesforceToken}`
},
appendMessageTypeToURL: false
});
其中 salesforceToken
是使用刷新 token 获取的。这一切在一段时间内都可以正常工作,但如果在相当长的一段时间内没有任何事件(据传是 6-24 小时之间的任何时间),那么我的客户似乎过期并且没有收到任何事件。如果我刷新 token 并重新启动我的监听器,事情就会重新开始。
除了编写某种计时器以在不活动后每隔几个小时重新启动进程之外,还有其他方法可以使监听器保持事件状态吗?
最佳答案
您不必再次刷新 token
只要 channel 上没有事件,服务器就会在特定时间后关闭连接。
此时客户端会收到一个403(未知客户端)状态码,客户端必须在 110 秒内再次握手。
默认情况下,CometD 会尝试在没有任何用户交互的情况下重新连接,如果客户端未在预期时间内重新连接,服务器会删除客户端的 CometD session 。
一旦连接重新连接,所有 channel 订阅将被 ComedD 删除,我们必须再次订阅 channel 才能接收事件。
为此,我们必须使用meta/Handshake 回调重新订阅 channel 。
关于salesforce - 如何在与 Salesforce Platform EventBus 通信的 cometd 客户端中刷新 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59304320/