@EnableBinding@deprecated自3.1起支持函数式编程模型
我看到 Spring Cloud Stream 的以下注释已折旧
@Input
@Output
@EnableBinding
@StreamListener
请提供示例和文档链接,了解如何以功能方式进行操作。
回答
Spring 现在不再使用基于注解的配置,而是使用检测到的 Consumer/Function/Supplier 的 bean 来为您定义流。旧版本带有注释的代码如下所示:
interface InputChannels {
@Input("input")
SubscribableChannel input();
}
@EnableBinding(InputChannels.class)
public class PubSubDemo {
@StreamListener("input")
public void listen() {
if (LOG.isInfoEnabled()) {
LOG.info(context.toString());
}
}
新版本代码如下:
public class PubSubDemo {
@Bean
Consumer<String> input() {
return str -> {
if (LOG.isInfoEnabled()) {
LOG.info(context.toString());
}
};
}
}
Check Consumer bean 替换了@StreamListener和@Input。
关于配置,如果之前为了配置你有一个 application.yml 看起来像这样:
spring:
cloud:
stream:
bindings:
input:
destination: destination
group: group
consumer:
concurrency: 10
max-attempts: 3
现在新的配置会像
spring:
cloud:
stream:
bindings:
input-in-0:
destination: destination
group: group
consumer:
concurrency: 10
max-attempts: 3
in 和 out 对应于绑定的类型(例如输入或输出)。索引是输入或输出绑定的索引。对于典型的单输入/输出功能,它始终为 0。
现在让我们考虑输出通道:
public interface OutputChannels {
@Output
MessageChannel output();
}
@Service
@EnableBinding(OutputChannels.class)
class PubSubSendQueue {
OutputChannels outputChannel;
public void publish() {
outputChannel.output().send("Hello");
}
}
现在函数代码将如下:
@Service
class PubSubSendQueue {
@Bean
public Supplier<String> output(){
return Supplier { "Adam" }
}
}
THE END
二维码