跳到主要内容

理解主题

要理解消息是如何从发布者流向订阅者的,您需要理解在发布-订阅模型中主题所扮演的角色。


什么是主题?

在事件驱动架构(EDA)中,事件被发布到主题,端点可以订阅一个或多个主题以吸引来自发布者的事件。从技术上讲,Saydo主题只是由一个或多个层级组成的字符串,作为元数据添加到消息头中,让发布者对消息进行分类,让订阅者指定他们想要接收的消息内容。这种发布-订阅模型使得事件代理能够使用主题作为路由信息,将事件消息发送到它们需要去的地方。

然而,主题不仅仅是提供路由信息的字符串。您还可以将主题视为事件消息主题的层次定义。主题既可以将事件路由到适当的接收者,也可以对事件本身进行分类和描述。一个定义良好的主题包含了特定事件的详细信息,订阅者只能接收与他们相关的事件实例,而不是接收所有实例的消息,然后在处理有效载荷后才丢弃他们不需要的消息。一个定义良好的主题结构可以使您的主题变得“智能”。

定义主题

Saydo主题是一个格式为a/b/c/.../n的字符串,其中a, b, c等是您设计的层次结构中的级别,用来描述您的事件。例如,如果您正在为示例航空公司(EA)发布信息,您可能需要像flight/boarding/ea1234/jfkflight/departed/ea321/yow这样的主题来组织您正在发布的事件。您可以在Saydo消息格式主题中了解完整的语法规则、构造和编码。

一个或多个主题级别可以使用变量来定义,这些变量在事件发生时被替换为特定于事件的属性。使用变量允许主题定义事件本身而不仅仅是事件的类别。变量可以用来在主题中包含位置、订单ID和其他关于事件的数据。我们的航空公司的两个事件实例flight/boarding/ea1234/jfkflight/departed/ea321/yow都可以由使用主题flight/[status]/[flightNumber]/[origin]的应用程序发送。

要了解更多关于定义主题的信息,您可以尝试PubSub+事件代理,并阅读主题架构最佳实践

主题订阅

主题订阅是一个用来吸引已发布事件的字符串。主题订阅可以包含通配符以匹配多个主题。*>字符可以作为主题订阅中的通配符使用。

  • *

*单独出现在主题订阅的一个级别中时,它表示在该级别进行通配符匹配。例如,flight/*/ea1234匹配主题flight/boarding/ea1234flight/departed/ea1234

  • >

>字符用于订阅的最后一级,表示“一个或多个”通配符匹配。例如,flight/boarding/>不匹配主题flight/boarding,但它确实匹配flight/boarding/ea1234flight/boarding/ea321/yow/fra

要了解更多关于通配符规则及其在主题订阅中的使用,请参见主题订阅中的通配字符

主题如何描述和路由事件

考虑以下主题示例。括号[ ]表示主题中的变量,在消息中被特定于事件的数据替换:

flight/[status]/[flightNumber]/[origin]/[destination]

这个示例可能会产生一个事件主题flight/boarding/ea1234/jfk/ord,其中:

  • flight表示事件的类型

  • boarding表示生成事件的操作

  • ea1234/jfk/ord是特定事件的属性

这个主题结构可以被系统中的应用程序用来发布任何航班的状态信息。订阅的客户端应用程序可以只订阅它们需要接收的事件。例如:

  • EA航班1234的机组人员可以接收与他们的航班相关的所有事件,订阅为flight/*/[flightNumber]/>

  • JFK的地面机组人员可以接收所有始发地为JFK的登机和滑行事件,以及所有目的地为JFK的着陆事件,使用以下订阅:

    • flight/boarding/*/jfk/*
    • flight/taxiing/*/jfk/*
    • flight/landing/*/*/jfk

使用丰富的主题层次结构允许事件代理智能地路由主题,而不需要反序列化、解码或解释事件。事件代理不需要理解事件,它们只需要知道如何根据事件的主题信息采取行动。这种层次结构创建了智能主题,通过使用多个动态主题级别来描述事件,订阅者可以过滤以接收他们需要的确切信息。

丰富的主题层次结构如何惠及事件网格

智能主题和订阅在事件网格中服务于多种目的,并在与丰富的主题层次结构结合时实现以下好处:

事件路由事件网格依赖于事件的主题和消费者订阅来做出路由决策。网格内的事件代理可以读取主题并将其与消费者订阅匹配,后者描述了消费者感兴趣的数据类型。事件主题允许事件代理在不需要复杂理解事件有效载荷中编码的数据的情况下做出路由决策。

事件过滤在事件网格中,消费者可以使用订阅对他们接收的数据进行细粒度控制。当与丰富的主题层次结构结合时,它允许消费者接收来自事件网格的确切所需数据。如果没有这种细粒度过滤,消费者可能需要丢弃一些接收到的数据,或者中介过程需要将数据重新发布到更具体的流中。这种过滤是Saydo主题如何变得“智能”的一个例子。

事件访问控制访问控制列表(ACL)允许对发布者被允许生产哪些事件以及消费者可以接收哪些事件进行管理。这种管理允许您控制数据流入和流出事件网格。当与丰富的主题层次结构结合时,您可以根据主题中数据的描述精确控制数据流。缺乏精确的访问控制可能会使流氓应用程序能够消费敏感信息或发起受限操作。

事件处理策略您可以根据主题订阅定义策略,以便在事件代理内处理事件,涉及优先级、重放资格和复制。从生产者到消费者的路由也可以使用静态定义的桥接策略来影响。有了丰富的主题层次结构,管理员可以确保正确的消息被复制、添加到重放日志等。要了解更多关于构建丰富的主题层次结构的信息,请参见主题架构最佳实践


这是关于Saydo主题的全部信息!

客户端接收事件消息的方式以及事件代理如何与发布者和客户端交互,取决于所使用的消息类型。在消息传递模式下了解更多。