如何将 AWS Lambda 订阅 Salesforce 平台事件

Mar*_*rst 5 salesforce amazon-web-services microservices aws-lambda

我们希望将 Salesforce 集成到 AWS 中的微服务结构中。这里有一篇关于这个的文章

因此我们希望 lambda 订阅 salesforce 中的某些平台事件。但我没有找到这方面的代码示例。我尝试使用node.js(没有lambda)。这很好用:

var jsforce = require('jsforce');
var username = 'xxxxxxxx';
var password = 'xxxxxxxxxxx';
var conn = new jsforce.Connection({loginUrl : 'https://test.salesforce.com'});
conn.login(username, password, function(err, userInfo) {

  if (err) { return console.error(err); }
    console.error('Connected '+userInfo);
  conn.streaming.topic("/event/Contact_Change__e").subscribe(function(message) {
    console.dir(message);
  });
}); 
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否是在 lambda 中执行此操作的正确方法。

sai*_*lle 0

我对 Salesforce Platform Events 的理解是他们在幕后使用CometD 。CometD 允许 HTTP 客户端(您的代码)订阅 HTTP 服务器发布的事件。

这意味着您的客户端代码需要运行并处于订阅状态,并在您期望接收事件的持续时间内侦听服务器事件。在大多数情况下,这个持续时间是不确定的,即您的客户端代码期望在订阅状态下永远等待,准备接收事件。

这与 AWS Lambda 函数不一致,后者预计会在相对较短的时间内完成执行(我上次检查时最多 15 分钟)。

我建议您需要一个长时间运行的进程,例如在 Elastic Beanstalk 或容器中运行的 Nodejs 应用程序。Nodejs 应用程序可以在订阅状态下无限期地保持运行。每次收到事件时,它都可以调用您的 AWS Lambda 函数以实施所需的操作。