我正在使用 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
)。有没有什么简短现代的写法?
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
。
如果我们有订单列表并且每个订单都有标题。然后如何访问每个标头。
点赞留言