在 Spring Cloud Stream 中创建的 "tap" 将保存为 "named destination"

A "tap" created in Spring Cloud Stream will be saved as a "named destination"

我正在尝试理解 Spring Cloud Stream 中的概念。 “tap”和“named destination”这两个概念让我很困惑。

我正在尝试创建一个带有名为“some-source”的分流器的流:

然而,在我保存流后,它变成了“命名目的地”:

我的问题是:

  1. “点击”和“指定目的地”有什么区别?
  2. 为什么在保存流后“点击”会变成“指定目标”?

A named 目的地是消息传递系统中的目的地。例如,RabbitMQ 的 exchange 或 Apache Kafka 的 topic

Spring 当您将 inbound/outbound 绑定设置为特定目标名称时,Cloud Stream 负责创建这些 named 目标(例如 RabbitMQ 交换、Apache Kafka 主题)。

在 SCDF 中,当您创建流时,SCDF 使用特定语法配置这些目标名称 (.)。

例如,假设我创建了这样一个流:

S1=时间 | t1:变换 |日志

部署流 S1 后,您将看到使用以下名称创建的目的地(如果您使用 RabbitMQ 或 Apache Kafka,则它们将分别交换或主题):

S1.time S1.t1

因为timetransform是生产者。

回答您的问题:

What's the difference between a "tap" and a "named destination"?

在 SCDF 中,tap 本质上是在生产者应用程序的出站端点上创建的 named 目的地。因此,当您在流 S1 的 time 输出上添加一个 tap 时,您将最终使用 named 目的地 S1.time.

您可以在创建主流时(此处为 S1)创建 tap,也可以稍后通过引用流的命名目标来创建新的 tap 流(此处S1.time,S1.t1)

Why would a "tap" become a "named destination" after saving the stream?

Spring Cloud Stream 有一个消费者组模型(灵感来自 Apache Kafka),它在它支持的所有绑定器中实现。这意味着,每当一个新的消费者绑定到消息系统的 destination(比如 RabbitMQ 的 exchange 或 Apache Kafka 的 topic)时,一个新的消费者组是为该目的地创建的。 tap 只是创建一个新流,在特定 named 目的地形成一个新的消费者组。

还有1个案例要补充

假设您要创建一个流,该流不是来自现有流的出站端点,而是要指向特定的 named 目标,该目标具有来自其他系统的数据。在这些情况下,您将使用 named 目标来创建流。由于 Spring Cloud Stream 的消费者组模型,您还将在此 named 目标上创建一个新的消费者组。

例如,假设我有一个 RabbitMQ 交换器或一个名为 user_data 的 Kafka 主题,它已经从不属于 SCDF 流的其他来源接收数据,那么您将创建一个新的流,如下所示:

:user_data > transform | jdbc

前缀 : 用于引用 SCDF 中的命名目标。