如何在与 Salesforce Platform EventBus 通信的 cometd 客户端中刷新令牌?



我正在使用cometd来监听Salesforce中生成的平台事件。我的 Comet 客户端配置代码如下所示

this.client.configure({
url: `${this.org.instance_url}/cometd/46.0`,
requestHeaders: {
Authorization: `Bearer ${salesforceToken}`
},
appendMessageTypeToURL: false
});

其中,使用刷新令牌获取salesforceToken。这一切都在一段时间内工作正常,但如果在相当长的一段时间内没有事件(轶事在 6-24 小时之间的任何地方(,那么我的客户端似乎过期并且没有收到任何事件。如果我刷新令牌并重新启动侦听器,则一切将再次开始工作。

除了编写某种计时器以在不活动后每隔几个小时重新启动进程之外,有没有办法保持侦听器处于活动状态?

您不必再次刷新令牌

只要通道上没有活动,服务器就会在特定时间后关闭连接。

在此期间,客户端会收到403(未知客户端(状态代码,客户端必须在 110 秒内再次握手。

默认情况下,CometD 尝试在没有任何用户交互的情况下重新连接,如果客户端未在预期时间内重新连接,服务器将删除客户端的 CometD 会话。

连接重新连接后,ComedD 将删除所有频道订阅,我们必须再次订阅频道才能接收事件。

为此,我们必须使用meta/握手回调再次重新订阅频道。

请参阅 https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/using_streaming_api_client_connection.htm,段落"无效身份验证后">

"流式处理 API 会在客户端连接时定期验证 OAuth 令牌或会话 ID。如果客户端身份验证无效,则会通知客户端 401::身份验证无效错误,以及包含 reconnect=none 的建议字段。在通道侦听器中收到错误通知后,客户端必须重新进行身份验证并重新连接才能接收新事件。

最新更新