Salesforce功能可用于Redis的Heroku数据
#体系结构 #redis #heroku #salesforce

Salesforce功能和HEROKU数据系列:三个第三部分

本文是关于使用Salesforce Function中使用Heroku Managed Data产品的三部分系列的第二部分。在第一部分中,我们专注于Heroku Postgres的Salesforce功能。在第二部分中,我们将使用Heroku Data for Redis探索Salesforce功能。最后,在第三部分中,我们将涵盖Salesforce功能和Apache Kafka on Heroku

核心概念简介

什么是Salesforce功能?

Salesforce功能是用于扩展您的Salesforce应用程序或流程的自定义代码。自定义代码可以利用您在Salesforce实例的安全环境中运行时选择的语言和库。

例如,您可以利用JavaScript库根据Salesforce中的触发过程来计算和缓存值。如果您是一般功能的新手,请查看Get to Know Salesforce Functionsâ€以了解它们是什么以及它们的工作方式。

Redis的Heroku数据是什么?

Heroku Data for RedisRedis键值数据存储,由Heroku为您完全管理。这意味着Heroku照顾诸如安全,备份和维护之类的事情。您需要做的就是使用它。由于Heroku是Salesforce的一部分,因此这使访问和安全性变得更加容易。 Heroku Dev Center documentation是找到Redis Heroku数据的更多细节的绝佳场所。

REDIS的Salesforce功能 + HEROKU数据的示例

redis通常用于您需要快速访问的短暂数据。示例包括缓存的值,工人或状态数据以进行流程或访问网站的用户执行的任务队列。尽管Redis可以将数据持续到磁盘,但它主要用作内存数据存储。让我们审查几种用例,让您更好地了解Salesforce功能和REDIS如何合并在一起。

用例1:在运行函数之间存储状态

可能有时一个过程具有多个阶段,每个阶段都需要运行函数。下一个功能运行时,您要捕获该功能运行的状态,该功能由下一个运行的功能使用。

一个例子可能是一个价格引用过程,每个阶段都需要一些后端计算。不同的人或团队可能会在此过程中执行步骤。他们甚至都不属于一个销售大师。但是,每个阶段运行的功能需要了解先前的结果。

用例2:管理工作流程的队列

此用例与背景作业的灵活性有关。由于基于Salesforce的应用程序在multitenant architecture上运行,因此Salesforce对CPU和应用程序的内存使用限制。长期运行的程序通常是界限和限制的。

那么,您如何为Salesforce org承担漫长或繁重的任务?答案是Salesforce功能。您可以连接您的功能以收集所需的信息并将其插入Redis。然后,您的Heroku worker processes可以检索信息并执行任务。

用例3:缓存昂贵操作的结果

在最后一个用例中,让我们假设您有一个昂贵的查询或计算。结果不经常变化,但是需要结果的报告经常运行。例如,也许我们希望在很少发生变化的大量记录中匹配一些标准。我们可以使用Salesforce功能来完成工作并重新存储结果。随后的函数执行可以简单地抓住缓存结果。

我如何开始?

要开始,您需要在Salesforce功能方面和Heroku方面都有几块。

从Salesforce功能访问REDIS的Heroku数据

一旦您涵盖了先决条件并创建了项目,就可以运行以下命令以使用HEROKU数据创建redis访问的函数。

要创建新的JavaScript函数,请运行以下命令:

$ sf generate function -n yourfunction -l javascript

将为您提供一个带有node.js应用程序模板的/functions文件夹。

连接到您的redis实例

您的功能代码可以使用dotenv软件包将REDIS URL指定为环境变量,而node-redis软件包则作为REDIS客户端。连接到Redis可能看起来像这样:

import "dotenv/config";
import { createClient } from 'redis';

async function redisConnect() {
  const redis = createClient({
    url: process.env.REDIS_URL,
    socket: {
      tls: true,
      rejectUnauthorized: false
    }
  });
  await redis.connect();
  return redis;
}

对于本地执行,使用process.envdotenv假设您有一个指定REDIS_URL.env文件。

将数据存储在Redis中

您的Salesforce功能的实际主体将涉及执行一些计算或数据获取,然后将结果存储在REDIS中。一个例子可能是这样:

export default async function (event, context) {
  const redis = await redisConnect();
  const CACHE_KEY = `my_cache_key`;
  const CACHE_TTL_SECONDS = 86400;

  // Check Redis for cached value
  let cached_value = await redis.get(CACHE_KEY);

  if (cached_value) {
    return { result: cached_value }
  } else {
    // Perform some calculation
    const calculated_value = await perform_long_running_computation();

    // Store in Redis
    redis.set(CACHE_KEY, calculated_value, {
      EX: CACHE_TTL_SECONDS,
      NX: true
    });
    // Return result
    return { result: calculated_value }
  }
}

在本地测试您的Salesforce功能

要在本地测试您的功能,您首先运行以下命令:

$ sf run function start

然后,您可以从另一个终端使用有效载荷调用该功能:

$ sf run function -l http://localhost:8080 -p '{"payloadID": "info"}'

有关本地运行功能的更多信息,请参见this guide

关联您的Salesforce功能和Heroku环境

在本地验证我们的函数按预期运行后,我们可以将SALESEFORCE功能与计算环境相关联。 (有关如何创建计算环境和部署函数的更多信息,请参见此documentation。)

现在,通过将HEROKU用户作为合作者添加到您的函数的计算环境中来关联您的功能和Heroku环境:

$ sf env compute collaborator add --heroku-user username@example.com

环境现在可以共享HEROKU数据。接下来,您将需要计算环境的名称,以便您可以将数据存储附加到它。

$ sf env list

最后,附加数据存储。

$ heroku addons:attach <your-heroku-redis> --app <your-compute-environment-name>

以下是一些其他资源,当您开始实施Salesforce功能并访问Redis的Heroku数据时,可能对您有所帮助:

结论

这样,您会使用Salesforce功能连接到Heroku数据!

salesforce功能使您可以在Salesforce应用程序中的灵活性和自由,以访问Heroku数据,无论该数据是否在Postgres,redis,甚至是Kafka中。在我们系列的第二部分中,我们介绍了使用Salesforce功能与Heroku Data合作进行REDIS。尽管这是一个相当高的概述,但您应该能够看到结合这两个功能的潜力。在本系列的最后一篇文章中,我们将与Heroku上的Apache Kafka集成。