如何替换已弃用的@StreamListener?

问题描述 投票:0回答:2

我正在使用 Spring Boot 和 Kafka。迁移到 Spring Boot 和其他版本的最新版本时,我遇到了以下问题:

@StreamListener
已弃用并从库中删除。我有一个主题
my_topic
并从中阅读,如下例所示:

public class OrderListener {
    @StreamListener("my_topic")
    public void consumeOrder(Order order) {
        // business logic
    }
}

在文档中建议使用函数式编程模型。它看起来怎样?我找到了这个代码示例:

@Bean
public Consumer<Message<Order>> consumeOrder() {
    return msg -> {
        // to get header - msg.getHeaders().get(key, valueType);
    }
}

尽管如此,它还是相当冗长,我喜欢以前的方法(

@StreamListener
)。有没有什么简短现代的写法?

java spring-boot spring-kafka spring-cloud-stream spring-cloud-stream-binder-kafka
2个回答
0
投票

StreamListener
已从框架中删除,而不是使用基于
java.util.function
的编程模型。如果你有输入和输出,可以使用
Function
;如果您只有输入,则使用
Consumer.
上面的
StreamListener
可以像上面那样重写,但是如果您不想访问标头,则不需要将有效负载包装在
Message.
例如,

@Bean
public Consumer<Order> consumeOrder() {
    return order -> {
        // business logic
    }
}

您可以使用模式提供目的地 -

spring.cloud.stream.bindings.consumeOrder-in-0.destination


0
投票

如果我们有订单列表并且每个订单都有标题。然后如何访问每个标头。 点赞留言

© www.soinside.com 2019 - 2024. All rights reserved.