Spring Clould Stream разрешает входной канал динамически на основе сообщения

Мне нужен способ динамического разрешения входящего канала в зависимости от типа входящего сообщения. Я не ищу какое-либо решение на основе заголовков, которое уже упоминалось в этой ссылке https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/3.0.0.M1/spring.-cloud-stream.html#_using_streamlistener_for_content_based_routing

Решение должно происходить в зависимости от типа сообщения. Если есть настраиваемая привязка, которая может быть выполнена при запуске приложения, чтобы иметь возможность сделать это, это должно быть нормально; Пожалуйста, дайте мне несколько примеров того, как этого можно достичь.




Ответы (1)


В Spring Cloud Stream такой поддержки нет.

Базовый проект Spring для Apache Kafka поддерживает такие сценарии.

См. @KafkaListener в классе .

Это требует, чтобы полезная нагрузка была десериализована десериализатором Kafka; то вызываемый метод зависит от типа полезной нагрузки.

Он также поддерживает резервный метод "по умолчанию".

@KafkaListener(id = "multi", topics = "myTopic")
static class MultiListenerBean {

    @KafkaHandler
    public void listen(String foo) {
        ...
    }

    @KafkaHandler
    public void listen(Integer bar) {
        ...
    }

    @KafkaHandler(isDefault = true)
    public void listenDefault(Object object) {
        ...
    }

}
person Gary Russell    schedule 11.04.2020