首页 > 解决方案 > 如何在与 Salesforce Platform EventBus 对话的 Cometd 客户端中刷新令牌?

问题描述

我正在使用 cometd 来监听 Salesforce 中生成的平台事件。我的 cometd 客户端配置代码看起来像

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

其中salesforceToken是使用刷新令牌获得的。这一切都可以正常工作一段时间,但如果在相当长的一段时间内没有事件(传闻在 6-24 小时之间的任何地方),那么我的客户似乎过期并且没有收到任何事件。如果我刷新令牌并重新启动我的侦听器,事情就会重新开始。

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

标签: salesforcecometd

解决方案


您不必再次刷新令牌

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

在那段时间,客户端收到403(未知客户端)状态码,客户端必须在 110 秒内再次握手。

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

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

为此,我们必须使用meta/Handshake回调来重新订阅频道。


推荐阅读