Spring 云流 + Avro

Spring Cloud Stream + Avro

我无法使用功能供应商发送 Avro 消息。 SCSt 尝试将消息作为 JSON 发送,但失败了。有人可以指出是否需要任何其他配置吗?

这是供应商的功能 bean

@Bean
public Supplier<Sensor> supplier() {
    Random random = new Random();
    return () -> Sensor.newBuilder()
        .setId("id")
        .setTemperature(random.nextFloat())
        .setAcceleration(random.nextFloat())
        .setVelocity(random.nextFloat())
        .build();
}

和配置

spring:
  cloud:
    schema-registry-client:
      endpoint: http://localhost:8990
    schema:
      avro:
        schema-locations: classpath:avro/sensor.avsc
    stream:
      function:
        definition: supplier
        bindings:
          supplier-out-0: sensor
      bindings:
        sensor:
          destination: sensor-exchange
          group: sensor-queue
          content-type: application/*+avro

这是由于发生转换的问题。我在 Spring 云函数中提出了一个问题:https://github.com/spring-cloud/spring-cloud-function/issues/611

作为解决方法,您可以使用如下内容类型:spring.cloud.stream.bindings...content-type: application/+avro,生产者配置中没有通配符类型。解决上述问题后,您可以继续使用其中包含通配符 (application/*+avro) 的内容类型。抱歉给您带来不便。

我更新了 this sample 以反映此解决方法,当我们得到适当的修复后,它将恢复。

更新:Spring Cloud Function 中的问题在 3.0.x 分支中得到解决。请使用以下依赖项来修复。

 <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-function-context</artifactId>
    <version>3.0.12.BUILD-SNAPSHOT</version>
</dependency>

有了这个,你可以在内容类型中使用通配符类型:application/*+avro.

3.0.12.RELEASE 下周可用。