使用 Oracle Integration 设计弹性

在设计弹性集成时,请遵循以下优秀实践。

设计集成

下面是一个基本的入站集成流,它通过 REST API 接收来自上游应用的请求,对请求进行语法分析、验证并将其发送到下游应用。

在上游应用程序发送请求时,下游应用程序可能会变得不响应。下游不会确认这些请求。批处理、复杂消息关联/流和限制等许多此类处理挑战。

我们举例说明如何使用 REST API 在 Oracle Financials 云上创建实体。请求必须由集成 REST 端点接收。您应该能够动态限制访问财务云的请求,并跟踪请求的状态,然后重新提交任何失败的请求。对于此解决方案,将显示三个集成和一个自治事务处理数据库。停车场的实施可以使用数据库或 Coherence 等各种存储技术完成。但是,为了简单起见,我们使用自治事务处理数据库表。

后面是 oic_extended_parkinglot_eh.png 的说明
插图 oic_extended_parkinglot_eh.png 的说明

在显示的图像中,当上游应用程序发送请求时,“请求持久”集成会将其发送到数据库并确认上游应用程序。在数据库中,停车场模式存储请求元数据和状态信息,并将根据输入请求进入的顺序处理输入请求。每个消息在存储中闲置 x 分钟(闲置时间),因此集成流有机会限制并发处理的消息数。

已编排的计划调度程序集成由计划触发。您可以计划此集成运行,以便在您选择的日期和时间从数据库复制请求。还可以定义集成的频率。这些请求将移交给异步处理器集成。异步处理器集成将处理传入的请求并将其发送到下游应用程序。

设计组件

高级设计包含三个集成和一个数据库。我们以创建为例,但实际上可能是任何 Oracle SaaS REST API 公开的任何业务对象。

Post 请求数

“请求持久”集成会公开 REST 触发器端点,上游应用程序(客户端)可以调用该端点来对帐户创建请求进行 POST。

此持久集成会在从客户端应用收到账户创建请求后立即将账户创建请求加载到自治事务处理数据库中,并确认收到 HTTP 202/Accepted 的收据。账户 ID 和整个有效负载将持久保存到停车场表中以供后续处理。

将请求装入停车场表

此处的自治事务处理数据库存放所有接收的请求在处理之前停放到的停车场表。为了简单起见,将显示一个简单表来持久保存有效负载并跟踪请求状态和任何错误信息。

账户创建 JSON 请求有效负载完全以字符串形式存储在停车场表中。可能存在一些用例来存储为 CLOB 或编码字符串,其中不希望在表中具有可见有效负载。但是,将有效负载存储为 json 提供了在错误重新提交期间更改有效负载的机会。

如果需要,可以将整个 JSON 请求存储在表中。您可以分两个阶段执行此操作:
  • 使用请求有效负载的 JSON 示例创建方案文件的阶段 Write
  • 使用不透明模式的阶段 Read Entire File 操作。

    提供 JSON 有效负载字符串的 base64 编码值。然后,内置函数 decodebase64(opaqueElement) 可以用在 mapper(或 assign)中获取 JSON 字符串值 !。GitHub 中提供了在阶段读取期间使用的不透明方案 xsd 文件,本解决方案后面将讨论该文件。

根据计划发送请求

计划集成已安排以所需的频率运行。在每次运行中,它都会获取已配置的请求数并通过这些请求循环将每个请求分派到异步处理器集成进行处理。

您可以将多个请求配置为调度的参数来限制或加速请求处理,还可以动态更改该值。例如,您可以设置一个表,以便根据请求的状态提取停车场表中的请求。您可以提取 NEWERROR_RETRY 状态请求并传递进行处理。

然后,此调度调度程序将循环处理提取的请求数,并将每个请求移交给异步处理器以创建帐户。确保调度程序(父)流调用单向异步集成(子)流。异步处理器不返回任何响应,因此调度程序线程被释放以返回并循环处理其余请求并分派它们。这可确保用于调度的特殊用例的调度程序线程在长期处理中不会被阻塞。请求处理本身的业务逻辑由 Oracle Integrations 中提供的异步处理资源处理。

以下是计划编排的一些最佳实践:始终使用异步移交与计划集成将计划逻辑与业务逻辑分离。这将确保调度程序线程不用于创建帐户。
  • 调度的编排旨在满足调度流的特定要求,使用异步移交释放它们可以使解决方案在处理大量请求时具有可扩展性和性能。
  • 计划编排不应用作应用程序驱动编排的替代。

您可以将操作添加到编排的集成。如果使用 for-each 操作,则可以在重复元素上循环,并在 for-each 操作范围内执行一个或多个操作。循环迭代次数基于用户选择的重复元素。例如,您可能有一个集成,其中您已下载了许多文件,并希望循环查看文件的输出。通过 for-each 操作,您可以执行此任务。请注意,可以为某些 for-each 循环选择 Process Items in Parallel (并行处理项)。这将确保 for-each 循环中的活动通过集成进行批处理并并行执行。在某些情况下,集成会忽略并行性。在这种情况下,并行度将设置为 1 以避免并发问题。

创建账户

异步处理器集成将处理来自调度分派程序的传入请求并将其发送到下游应用程序。

异步处理器公开 REST 接口。务必将此集成建模为单向异步流,以释放调度程序集成。以一种方式设置异步集成时,请确保 REST 触发器公开 POST 方法,并且 REST 流不会向客户端返回响应。
  1. 您可以在配置 Rest 端点向导中配置这两者。
    1. 在集成画布上,在触发器窗格中,如果尚未列出 REST 适配器,请单击 REST
    2. 将集成连接拖动到画布上的 START 下面的加号图标。这将显示配置 REST 端点配置向导。
  2. 在向导的“基本信息”页上,从要对端点执行什么操作的下拉列表中选择 POST
  3. 选择 Configure a request payload for this endpoint 端点。

由于异步流执行实际账户创建,因此它将负责更新停车场表中的请求状态。成功创建帐户后,停车场表中的 STATUS 列将更新为 PROCESSED

处理失败的请求

可以从停车场表中控制失败请求的重新提交。范围级别错误处理程序在创建帐户期间处理任何故障,并针对任何错误将状态更新为 ERRORED停车场表中的原因和错误详细信息也会更新。这对于确定以后是否可以重新提交请求非常有用。您还可以将错误通知电子邮件发送给集成管理员。

故障处理程序在停车场表中将失败的请求设置为 ERRORED 状态。这些请求可以在表中更新为 ERROR_RETRY 状态,并且由于调度调度调度程序自治事务处理数据库调用的选择标准,它们将在下一个调度中选取进行重新处理。

有多种选项可以触发此类重新提交:
  • 管理员可以对数据库执行对 ERROR_RETRYERRORED 请求更新。
  • 您甚至可以添加每日运行或任何所需频率的重新提交集成流,并将所有 ERRORED 记录更新为 ERROR_RETRY
  • 异步处理器集成的故障处理程序可以直接将状态设置为 ERROR_RETRY ,因此每次故障都会在下一个调度中自动重新提交。

有效负载更正

将账户创建有效负载存储在停车场表中为我们提供了一种在重新提交之前更正数据错误有效负载的方法。更新有效负载并将状态列设置为 ERROR_RETRY 以重新提交具有已更正有效负载的请求。