Apex-事件驱动(1)

学习目标

完成本单元后,您将能够:

  • 列出基于事件的软件体系结构的组件。
  • 解释一个事件驱动的软件架构的好处。
  • 描述平台事件功能的用例。
  • 描述平台事件的特征。

了解事件驱动的软件体系结构

您的订单系统是否有包裹?打印机墨盒是否需要更换?无论您希望得到什么通知,Salesforce企业消息传递平台都可以在Salesforce内部和外部来源提供安全且可扩展的自定义通知。通过平台事件,您可以监视系统并将更改传达给其他系统。

注意

如果尚未完成,请先完成API基础模块,然后再使用该模块。熟悉Streaming API的概念是此模块的先决条件。

基于事件的沟通的范例围绕发布者 – 订阅者模型展开 – 发送者广播一个或多个接收者捕获的消息。这就像无线电传输 – 发射塔发射无线电信号,接收机获得信号,如果他们调整到正确的频率。

就像无线电传输一样,基于事件的通信从发送者流向接收者。无论接收者是否正在侦听,事件都会被发送,接收者在收到事件时不会确认。基于事件的通信可以实时进行,或者更准确地说,可以近乎实时地进行。无线电波以光速行进,但基于事件的软件和硬件系统通常有一些延迟。非必要的披露:Salesforce速度很快,但速度不及光速!

在API基础模块中,我们使用海盗船上雷达的类比来表示事件检测。这个类比适用于基于Salesforce记录更改的PushTopic事件流。该通信模型只需要一个用户。但是对于平台事件,通信有两方:发送方和接收方。它们是事件驱动架构的两个组成部分。

事件驱动系统的组件

在我们继续之前,让我们定义一些术语。

Event
在业务流程中有意义的状态变化例如,采购订单的放置是一个有意义的事件,因为订单履行中心希望在处理订单前收到通知。
Event message
包含有关事件数据的消息。也被称为事件通知。例如,事件消息可以是关于包含关于订单的信息的订单放置的通知。
Event producer
通过频道发布事件消息。例如,一个订单放置应用程序。
Event channel
事件生成器发送事件消息和事件消费者读取这些消息的事件流。在Salesforce中也称为事件总线。
Event consumer
从频道接收讯息的频道的订阅者。例如,通知新订单的订单履行应用程序。

下图说明了一个基于事件的软件体系结构。

A diagram showing components of event-based systems: event producers, which feed information into the event bus, which sends messages to the event consumers

与请求响应通信模型不同,基于事件驱动模型的软件架构将事件生成者与事件消费者分离,从而简化了连接系统中的通信模型。不需要向服务器请求获取关于某个状态的信息。相反,系统订阅事件通道,并在新状态发生时通知。任何数量的消费者都可以接收和响应相同的事件。当事件发生时,系统会获得这些信息,并可以近乎实时地对其作出反应。除了消息内容的语义之外,发送事件的系统和接收事件的系统彼此之间没有依赖关系。

Salesforce企业消息传递平台提供事件驱动软件体系结构的好处。平台事件是您的应用程序发送和接收的事件消息。它们简化了沟通变化和响应变化的过程,而无需编写复杂的逻辑。发布者和订阅者通过平台事件相互通信。一个或多个用户可以听相同的事件并执行操作。

假设一家名为“云新闻”的新闻机构向订阅的客户发送活动信息,以及有关山区撤退目的地的交通和道路状况的最新突发消息。这些事件的内容不仅仅是新闻事件本身,还包括新闻是否紧急以及事件的发生地点等相关细节。用户可以接收这些事件,并根据新闻的紧急性确定要采取的行动。

所有这一切听起来都不错,但是当你可以使用平台事件时,真实情况是什么呢?当然,平台活动的使用不限于新闻机构。以下是一些有用的应用程序。

何时使用平台事件的示例

我们来看看使用平台事件的一些业务场景。在这些情况下,Salesforce和外部系统通过平台事件消息进行通信。在第一种情况下,Salesforce中的应用程序通知产品装运订单的外部订单履行应用程序。在第二种情况下,外部产品应用程序通知Salesforce商品退货。最后一个场景显示了如何使用触发器在Salesforce中使用事件消息。

平台到外部应用程序:订单履行供应商应用程序

当Salesforce关闭一个机会时,您的公司已经赢得了与客户的交易。假设您使用供应商来运送与机会相关的产品。每个供应商都有一个处理装运订单的外部应用。外部应用程序监听平台事件。当机会关闭时,作为Salesforce产品订购应用程序一部分的触发器会触发并发布平台事件消息。每个供应商应用程序都会收到有关该事件的通知,并为特定产品创建装运订单。

In this diagram, a product order app publishes an order event to an event bus. Various vendor apps subscribe to the event bus and receive the event.

平台应用程序的外部应用程序:处理Salesforce中的商品退货

比方说,有人想把购买的商品退还给供应商。外部系统将商品退货请求发送给Salesforce进行处理。外部系统发布平台事件以提醒Salesforce返回商品。 Salesforce中的事件侦听器(触发器)接收事件并执行一些操作。例如,触发器可能会提醒销售代表退货,并向客户发送确认电子邮件。

An external vendor app publishes a platform event message for a merchandise return request. In Salesforce, a trigger subscribes to the event bus and receives the event.

平台到平台:重新分配主要记录

在Salesforce中分配销售线索时,销售线索触发器会触发并检查与销售线索所有者相关的未决商机和案例。根据相关记录,触发器发布由Salesforce应用程序接收的事件。根据事件信息,应用程序将重新分配潜在客户并创建一个Chatter帖子。

在这种情况下,您可以使用其他Salesforce功能执行相同的操作,例如Process Builder或流程。但是通过使用平台事件,您可以从基于事件的编程模型和跨应用程序的标准编程方式中受益。

In this diagram, an app in Salesforce publishes a platform event. A trigger subscribes to this event channel and receives the event.

平台事件特征

现在您已经了解了何时使用平台事件,让我们深入了解其组件和特性。

您可以定义平台事件包含的自定义数据。就像自定义对象一样,您可以在Salesforce中定义平台事件。通过给它一个名称并添加自定义字段来创建一个平台事件定义。以下是云新闻社新闻事件的自定义字段的示例定义。

字段标签/名称 字段API名称 字段类型
Location Location__c Text

Length: 100

Urgent Urgent__c Checkbox
News Content News_Content__c Text Area (Long)

平台事件和sObjects

平台事件是一种特殊的Salesforce实体,在很多方面与sObject类似。事件消息是平台事件的实例,类似于记录是自定义对象的实例。与自定义对象不同,您不能更新或删除事件记录,也不能在Salesforce用户界面中查看事件记录。

您可以设置读取和创建平台事件的权限。您向配置文件或权限集中的用户授予权限。

在本机和外部应用程序中使用平台事件

平台事件支持Salesforce内部和外部应用程序中的事件消息流。 Salesforce平台上的应用程序使用Apex方法发布事件,并使用Apex触发器来消费事件。此外,Visualforce和Lightning组件应用程序可以使用CometD订阅事件。作为代码的替代方法,您可以使用声明性工具(如Process Builder和Cloud Flow Designer)发布事件。最后,外部应用程序使用sObject API发布事件,并使用CometD客户端消费事件。如您所见,在选择使用平台事件方面有很大的灵活性!

平台事件和其他流式事件之间的差异

其他流媒体事件呢?其他事件包括PushTopic和通用事件。借助PushTopic事件,客户端将根据预定义的查询接收有关Salesforce记录更改的消息。使用通用事件,您可以发送和接收任意消息内容(有效内容),而不一定与Salesforce记录绑定。平台事件与通用事件类似,但提供更强大的自定义功能。借助平台事件,您可以发布任何自定义数据。您可以将粒度级别的事件数据模式定义为键入的字段。另外,您可以在本地Salesforce平台应用程序和外部应用程序中使用平台事件。在以下情况下使用平台事件:

  • 使用预定义模式发送和接收自定义事件数据
  • 发布或订阅Apex中的活动
  • 为了在Salesforce平台上和以外发布和处理事件的灵活性该表比较了一般事件和平台事件的特征。

功能通用事件平台事件

特征 通用事件 平台事件
将事件模式定义为类型字段 Check mark
包含用户定义的有效载荷 Check mark Check mark
通过一个或多个API发布事件 Check mark Check mark
通过Apex发布活动 Check mark
通过CometD订阅 Check mark Check mark
通过Apex触发器订阅 Check mark
使用Process Builder以声明方式发布并流动复选标记 Check mark

在下一个单元中,我们将定义一个平台事件并发布事件。