gpt4 book ai didi

java - Spring Cloud - 输入与输出

转载 作者:行者123 更新时间:2023-12-02 11:33:30 24 4
gpt4 key购买 nike

From this example:

@SpringBootApplication
@EnableBinding(MyProcessor.class)
public class MultipleOutputsServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MultipleOutputsServiceApplication.class, args);
}

@Autowired
private MyProcessor processor;

@StreamListener(MyProcessor.INPUT)
public void routeValues(Integer val) {
if (val < 10) {
processor.anOutput()
.send(message(val));
} else {
processor.anotherOutput()
.send(message(val));
}
}

private static final <T> Message<T> message(T val) {
return MessageBuilder.withPayload(val)
.build();
}
}

MyProcessor 接口(interface):

public interface MyProcessor {
String INPUT = "myInput";

@Input
SubscribableChannel myInput();

@Output("myOutput")
MessageChannel anOutput();

@Output
MessageChannel anotherOutput();
}

我的问题:

为什么MultipleOutputsServiceApplication类中的方法routeValuesMyProcessor.INPUT注释而不是MyProcessor.myOutput(将此成员添加到之后>MyProcessor 接口(interface))?

From the docsINPUT用于获取数据,OUTPUT用于发送数据。为什么这个例子做了相反的事情,如果我反转它,什么也不起作用?

最佳答案

这个方法对我来说看起来是正确的。它不必使用 @Output 进行注释,因为您的方法没有返回类型,并且您以编程方式将输出发送到方法中的任意目的地(通过两个不同的输出绑定(bind))。因此,您需要确保您的输出正确绑定(bind),就像您的程序通过 @EnableBinding(MyProcessor.class) 正确绑定(bind)一样。您需要该方法上的 @StreamListener(MyProcessor.INPUT) ,因为 MyProcessor.INPUT 是 StreamListener 监听的绑定(bind)。一旦通过该输入获取数据,您的代码就会以编程方式接管向下游发送数据。话虽如此,有多种方法可以解决这些类型的用例。您也可以这样做。

    @StreamListener
public void routeValues(@Input("input")SubscribableChannel input,
@Output("mOutput") MessageChannel myOutput,
@Output("output")MessageChannel output {

input.subscribe(new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {

int val = (int) message.getPayload();

if (val < 10) {
myOutput.send(message(val));
}
else {
output.send(message(val));
}
}
}

关于java - Spring Cloud - 输入与输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49107074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com