卡夫卡的春季云流

时间:2019-12-04 12:01:13

标签: apache-kafka spring-cloud-stream

在将kafka与春季云流集成中需要一些帮助。该应用程序非常简单,分为两部分(作为独立的Java进程运行)

  1. 消费者将请求放入RequestTopic,并从ResponseTopic获取响应
  2. 生产者-从RequestTopic获取请求,并将响应放回ResponseTopic。

我已经为消费者和RequestReceiverChannel和ResponseSenderChannel创建了RequestSenderChannel和ResponseReceiverChannel接口 用于生产者应用程序。他们两个共享同一个yaml文件。 根据文档spring.cloud.stream.bindings..destination应该指定消息发送或接收到的主题。 但是,当我运行该应用程序时,该应用程序会在kafka中创建“ RequestSender”,“ RequestReceiver”,“ ResponseSender”和“ ResponseReceiver”主题。

我的假设是:由于YAML文件中的目标仅指定了两个主题“ RequestTopic”和“ ResponseTopic”,因此它应该已经创建了这些主题。 但会为YAML文件中“ spring.cloud.stream.bindings”中指定的属性创建Kafka主题。 有人可以在配置/代码中指出问题吗?

public interface RequestReceiverChannel
{
    String requestReceiver ="RequestReceiver";
    @Input(requestReceiver)
    SubscribableChannel pathQueryRequest();
}

public interface RequestSenderChannel
{
    String RequestSender ="RequestSender";
    @Output(RequestSender)
    MessageChannel pathQueryRequestSender();
}

public interface ResponseReceiverChannel
{
    String ResponseReceiver = "ResponseReceiver";
    @Input(ResponseReceiver)
    SubscribableChannel pceResponseServiceReceiver();
}
public interface ResponseSenderChannel
{
    String ResponseSender = "ResponseSender";
    @Output(ResponseSender)
    MessageChannel pceResponseService();
}
'''

YAML配置文件

spring:
  cloud:
    stream:
      defaultBinder: kafka
      bindings:
        RequestSender:
          binder: kafka
          destination: RequestTopic
          content-type: application/protobuf
          group: consumergroup
        ResponseSender:
          binder: kafka
          destination: ResponseTopic
          content-type: application/protobuf
          group: consumergroup
        RequestReceiver:
          binder: kafka
          destination: RequestTopic
          content-type: application/protobuf
          group: consumergroup
        ResponseReceiver:
          binder: kafka
          destination: ResponseTopic
          content-type: application/protobuf
          group: consumergroup
      kafka:
        bindings:
          RequestTopic:
            consumer:
              autoCommitOffset: false
          ResponseTopic:
            consumer:
              autoCommitOffset: false
        binder:
          brokers: ${SERVICE_KAFKA_HOST:localhost}
          zkNodes: ${SERVICE_ZOOKEEPER_HOST:127.0.0.1}
          defaultZkPort: ${SERVICE_ZOOKEEPER_PORT:2181}
          defaultBrokerPort: ${SERVICE_KAFKA_PORT:9092}

1 个答案:

答案 0 :(得分:1)

通过执行DateTime,您表示希望将spring.cloud.stream.bindings.<binding-name>.destination=foo(例如,<binding-name>)指定的绑定映射到名为RequestSender的代理目标。如果该目的地不存在,它将被自动配置。 因此没有问题。

也就是说,我们刚刚发布了Horsham.RELEASE(云Hoxton.RELEASE的一部分),而我们正在从您当前使用的基于注释的模型中移开,而转而使用一种更为简单的功能模型。您可以在我们的release blog中阅读有关它的更多信息,该文章还提供了我们详细阐述的4个帖子的链接,并提供了有关函数式编程范例的更多示例。