Функция маршрутизации событий Spring Cloud Stream автоматически создает новую тему

Вкратце: включение функции маршрутизации событий, похоже, автоматически создает тему routingFunction-out-0, и мы не знаем почему, и мы не хотим этого. Как?

Некоторый контекст: мы используем связыватель kafka для подключения к Azure Eventhubs и используем avro для serder. В настоящее время существует 4 типа сообщений, которые можно отправлять, и все они наследуются от абстрактного класса Event. На данный момент 3 из них имеют одинаковые свойства.

Первоначально я пытался создать Consumer, который позволил бы мне получать сообщения всех подклассов для Event. Однако это вызвало проблемы, потому что десериализатору avro нужна точная информация о типе, а не только суперкласс.

Это означало наличие определенного потребителя для каждого подкласса Event. Дублирование неприятно, но пока мы все еще ищем способ заставить все работать. Проблема в том, что в одной теме есть 4 потребителя, и сообщения отправляются не тому потребителю (потребителю отправляется тип avro 'eventsubclass1').

Итак, следующим шагом была попытка использовать функцию маршрутизации, routing-expression: headers ['type'], если быть точным, и заполнить заголовок типа в отправляемом нами сообщении. Однако включение функции маршрутизации, похоже, создает тему functionRouter-out-0, а eventhub не позволяет создавать темы на лету (даже если это возможно, это не то, что мы хотели бы делать).

При запуске с локальной кафкой и проверке этой темы в эту тему ничего не отправляется. Так почему это вообще там? Есть ли способ отключить это поведение?

Это (часть) нашего конфига:

spring:
  cloud:
    function:
      routing-expression: headers['type']
    stream:
      function:
        definition: ..;functionRouter
      bindings:
        ...
        functionRouter-in-0:
          destination: fup-internal-test
          contentType: "application/*+avro"

При необходимости я буду рад предоставить дополнительную информацию.

Изменить: я попытался создать концентратор событий с именем functionRouter-out-0, но это автоматически превратилось в функцию ino r external-out-0. KafkaTopicProvisioner чувствителен к регистру, так что это тоже тупик.


comment
Я считаю, что это ошибка, поэтому я открыл проблему. См. stackoverflow.com/questions/67419839 и github.com/spring-cloud/spring-cloud-stream/issues/2168   -  person Gary Russell    schedule 07.05.2021