消息关联描述消息如何与工作流实例(即与消息捕获事件)关联。在Zeebe中,消息不会直接发送到工作流实例。相反,它是用相关信息发布的。当工作流实例在指定相同关联信息的消息捕获事件处等待时,则消息与工作流实例关联。相关信息包含消息的名称和相关键。
例如:
将创建订单工作流的实例,并在消息捕获事件处等待,直到收集到资金。message catch事件指定收集的消息名称money和相关键orderid。该键通过工作流实例变量orderid解析为order-123。
支付服务使用Zeebe客户之一发布消息。它有收款名称和相关键order-123。由于相关信息匹配,因此消息与工作流实例相关联。这意味着它的有效负载被合并到工作流实例有效负载中,并留下消息捕获事件。
请注意,如果消息共享相同的关联信息,则可以将其关联到多个工作流实例。但每个工作流实例只能关联一次。
Message Buffering
在Zeebe中,消息可以在给定的时间内进行缓冲。在不能保证在消息发布之前输入消息捕获事件的情况下,缓冲可能很有用。
消息具有生存时间(TTL),它指定缓冲时间。在这段时间内,消息可以关联到工作流实例。
当工作流实例进入消息捕获事件时,它会轮询缓冲区以获得正确的消息。如果存在正确的消息,则它与工作流实例相关联。如果多条消息与相关信息匹配,那么第一条已发布的消息就是相关的。缓冲区的行为类似于队列。
当消息的TTL设置为零时,消息的缓冲将被禁用。如果消息无法与工作流实例关联,则将丢弃该消息。
Message Uniqueness
消息可以包含唯一的ID,以确保它只发布一次(即等幂)。ID可以是任何字符串,例如请求ID、跟踪号或消息队列中的偏移量/位置。
发布消息后,它将检查缓冲区中是否存在同名、相关键和ID的消息。如果是,则消息将被拒绝且不相关。
注意,唯一性检查只检查缓冲区。如果从缓冲区中丢弃了一条消息,那么随后可以发布具有相同名称、相关键和ID的消息。
zeebe qq交流群群号:856546010