Cometd/bayeux 客户 + 销售人员流 API 问题
Cometd/bayeux client + salesforce streaming API issue
我的 .NET 客户端(windows 服务)订阅了 Salesforce 流式传输 API 推送主题。
我可以连接到 Salesforce 并可以向我的客户发送通知。一切正常,但是:
如果在一段时间(可能 2 小时)后通道上没有 activity(Salesforce 对象没有更改),如果我更新对象,我不会收到来自 Salesforce 的任何通知。
我试过让听众记录下来,在下面的日志中
{"clientId":"f6xo67iet55w5j7ek6ldw72nfc6","channel":"/meta/connect","id":"82","successful":true} 5/15/2018 8:12:28 PM
{"advice":{"interval":0,"reconnect":"handshake"},"channel":"/meta/connect","id":"83","error":"403::Unknown client","successful":false} 5/15/2018 8:12:28 PM
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","advice":{"interval":0,"timeout":110000,"reconnect":"retry"},"channel":"/meta/connect","id":"85","successful":true}
5/15/2018 8:12:29 PM
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","channel":"/meta/connect","id":"86","successful":true}
5/15/2018 8:14:20 PM
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","channel":"/meta/connect","id":"87","successful":true}
5/15/2018 8:16:10 PM
所以根据日志,有时我会收到“403::Unknown client”,但紧接着它再次显示通道成功。
但是正如我所说,当我在 2 小时后尝试更新 Salesforce 对象时(根据日志,连接成功)我没有收到任何通知。
如果我重新启动 windows 服务并再次收到通知。
在我的客户端中,我使用来自 - https://github.com/couchand/CometD.NET/tree/headers 的 cometd
对于推送主题订阅,我正在使用这个 - https://github.com/foluis/Salesforce_PushTopics
如有任何帮助,我们将不胜感激。
好的,我终于可以让它工作了。以下是变化
- 只要出现“403::Unknown client”,CometD 就会尝试重新连接(cometd 的默认行为)
- 一旦重新连接,所有频道订阅将被删除(这是 cometd 所做的,它的默认行为)
- 所以,解决方案是,我们总是需要在 "meta/Handshake" 回调中进行频道订阅。这甚至 cometd.org 也建议这样做。
- 这将确保每次握手时通道都同步
- 执行此操作后,我的 salesforce 同步工作正常,即使我们不从 salesforce 更新任何对象,然后在 2 天后尝试它仍然有效。
我的 .NET 客户端(windows 服务)订阅了 Salesforce 流式传输 API 推送主题。
我可以连接到 Salesforce 并可以向我的客户发送通知。一切正常,但是:
如果在一段时间(可能 2 小时)后通道上没有 activity(Salesforce 对象没有更改),如果我更新对象,我不会收到来自 Salesforce 的任何通知。
我试过让听众记录下来,在下面的日志中
{"clientId":"f6xo67iet55w5j7ek6ldw72nfc6","channel":"/meta/connect","id":"82","successful":true} 5/15/2018 8:12:28 PM
{"advice":{"interval":0,"reconnect":"handshake"},"channel":"/meta/connect","id":"83","error":"403::Unknown client","successful":false} 5/15/2018 8:12:28 PM
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","advice":{"interval":0,"timeout":110000,"reconnect":"retry"},"channel":"/meta/connect","id":"85","successful":true} 5/15/2018 8:12:29 PM
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","channel":"/meta/connect","id":"86","successful":true} 5/15/2018 8:14:20 PM
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","channel":"/meta/connect","id":"87","successful":true} 5/15/2018 8:16:10 PM
所以根据日志,有时我会收到“403::Unknown client”,但紧接着它再次显示通道成功。
但是正如我所说,当我在 2 小时后尝试更新 Salesforce 对象时(根据日志,连接成功)我没有收到任何通知。
如果我重新启动 windows 服务并再次收到通知。
在我的客户端中,我使用来自 - https://github.com/couchand/CometD.NET/tree/headers 的 cometd 对于推送主题订阅,我正在使用这个 - https://github.com/foluis/Salesforce_PushTopics
如有任何帮助,我们将不胜感激。
好的,我终于可以让它工作了。以下是变化
- 只要出现“403::Unknown client”,CometD 就会尝试重新连接(cometd 的默认行为)
- 一旦重新连接,所有频道订阅将被删除(这是 cometd 所做的,它的默认行为)
- 所以,解决方案是,我们总是需要在 "meta/Handshake" 回调中进行频道订阅。这甚至 cometd.org 也建议这样做。
- 这将确保每次握手时通道都同步
- 执行此操作后,我的 salesforce 同步工作正常,即使我们不从 salesforce 更新任何对象,然后在 2 天后尝试它仍然有效。