学习目标
- 列出基于事件的软件体系结构的组件。
- 解释一个事件驱动的软件架构的好处。
- 描述平台事件功能的用例。
- 描述平台事件的特征。
了解事件驱动的软件体系结构
您的订单系统是否有包裹?打印机墨盒是否需要更换?无论您希望得到什么通知,Salesforce企业消息传递平台都可以在Salesforce内部和外部来源提供安全且可扩展的自定义通知。通过平台事件,您可以监视系统并将更改传达给其他系统。
事件驱动系统的组件
在我们继续之前,让我们定义一些术语。
- Event
- 在业务流程中有意义的状态变化例如,采购订单的放置是一个有意义的事件,因为订单履行中心希望在处理订单前收到通知。
- Event message
- 包含有关事件数据的消息。也被称为事件通知。例如,事件消息可以是关于包含关于订单的信息的订单放置的通知。
- Event producer
- 通过频道发布事件消息。例如,一个订单放置应用程序。
- Event channel
- 事件生成器发送事件消息和事件消费者读取这些消息的事件流。在Salesforce中也称为事件总线。
- Event consumer
- 从频道接收讯息的频道的订阅者。例如,通知新订单的订单履行应用程序。
下图说明了一个基于事件的软件体系结构。
与请求响应通信模型不同,基于事件驱动模型的软件架构将事件生成者与事件消费者分离,从而简化了连接系统中的通信模型。不需要向服务器请求获取关于某个状态的信息。相反,系统订阅事件通道,并在新状态发生时通知。任何数量的消费者都可以接收和响应相同的事件。当事件发生时,系统会获得这些信息,并可以近乎实时地对其作出反应。除了消息内容的语义之外,发送事件的系统和接收事件的系统彼此之间没有依赖关系。
Salesforce企业消息传递平台提供事件驱动软件体系结构的好处。平台事件是您的应用程序发送和接收的事件消息。它们简化了沟通变化和响应变化的过程,而无需编写复杂的逻辑。发布者和订阅者通过平台事件相互通信。一个或多个用户可以听相同的事件并执行操作。
假设一家名为“云新闻”的新闻机构向订阅的客户发送活动信息,以及有关山区撤退目的地的交通和道路状况的最新突发消息。这些事件的内容不仅仅是新闻事件本身,还包括新闻是否紧急以及事件的发生地点等相关细节。用户可以接收这些事件,并根据新闻的紧急性确定要采取的行动。
所有这一切听起来都不错,但是当你可以使用平台事件时,真实情况是什么呢?当然,平台活动的使用不限于新闻机构。以下是一些有用的应用程序。
何时使用平台事件的示例
我们来看看使用平台事件的一些业务场景。在这些情况下,Salesforce和外部系统通过平台事件消息进行通信。在第一种情况下,Salesforce中的应用程序通知产品装运订单的外部订单履行应用程序。在第二种情况下,外部产品应用程序通知Salesforce商品退货。最后一个场景显示了如何使用触发器在Salesforce中使用事件消息。
平台到外部应用程序:订单履行供应商应用程序
当Salesforce关闭一个机会时,您的公司已经赢得了与客户的交易。假设您使用供应商来运送与机会相关的产品。每个供应商都有一个处理装运订单的外部应用。外部应用程序监听平台事件。当机会关闭时,作为Salesforce产品订购应用程序一部分的触发器会触发并发布平台事件消息。每个供应商应用程序都会收到有关该事件的通知,并为特定产品创建装运订单。
平台应用程序的外部应用程序:处理Salesforce中的商品退货
比方说,有人想把购买的商品退还给供应商。外部系统将商品退货请求发送给Salesforce进行处理。外部系统发布平台事件以提醒Salesforce返回商品。 Salesforce中的事件侦听器(触发器)接收事件并执行一些操作。例如,触发器可能会提醒销售代表退货,并向客户发送确认电子邮件。
平台到平台:重新分配主要记录
在Salesforce中分配销售线索时,销售线索触发器会触发并检查与销售线索所有者相关的未决商机和案例。根据相关记录,触发器发布由Salesforce应用程序接收的事件。根据事件信息,应用程序将重新分配潜在客户并创建一个Chatter帖子。
在这种情况下,您可以使用其他Salesforce功能执行相同的操作,例如Process Builder或流程。但是通过使用平台事件,您可以从基于事件的编程模型和跨应用程序的标准编程方式中受益。
平台事件特征
现在您已经了解了何时使用平台事件,让我们深入了解其组件和特性。
您可以定义平台事件包含的自定义数据。就像自定义对象一样,您可以在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平台上和以外发布和处理事件的灵活性该表比较了一般事件和平台事件的特征。
功能通用事件平台事件
特征 | 通用事件 | 平台事件 |
---|---|---|
将事件模式定义为类型字段 | ||
包含用户定义的有效载荷 | ||
通过一个或多个API发布事件 | ||
通过Apex发布活动 | ||
通过CometD订阅 | ||
通过Apex触发器订阅 | ||
使用Process Builder以声明方式发布并流动复选标记 |
在下一个单元中,我们将定义一个平台事件并发布事件。