Вкратце: включение функции маршрутизации событий, похоже, автоматически создает тему 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 чувствителен к регистру, так что это тоже тупик.