阅读this article后,我可以阅读一个主题1并发布到另一个主题2。但是,当要从topic2读到topic3时,会收到类似“找不到需要一个名为'topic3'的bean的组件的错误。因此,我认为我还不了解该主题的绑定方式。
可行(仅出于学习目的):
/**
* get sample data from topic, create objects and send them
* @param s
* @return
*/
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
public Object processStg1(String s) {
String arr[] = s.split(";");
if (arr[0].equalsIgnoreCase("Contract")) {
Contract c = new Contract();
c.setId(Integer.parseInt(arr[1]));
c.setName(arr[2]);
return c;
}
else if (arr[0].equalsIgnoreCase("Cashflow")) {
Cashflow cf = new Cashflow();
cf.setContractId(Integer.parseInt(arr[1]));
cf.setDate(arr[2]);
cf.setAmount(Float.parseFloat(arr[3]));
return cf;
}
return ("ERROR: could not parse type");
}
我了解我是通过application.properties绑定主题的。
spring.cloud.stream.bindings.output.destination=topic2
spring.cloud.stream.bindings.output.useNativeEncoding=true
spring.cloud.stream.bindings.input.destination=topic1
spring.cloud.stream.bindings.input.useNativeDecoding=true
现在,我想在同一应用程序中阅读topic2的合同。 像
//无效
@StreamListener(Processor.INPUT)
public void processStg2(Contract c) {
System.out.println("a contract was found");
}
或
//无效
@StreamListener
public void process(@Input("topic2") KStream<String, Contract> contracts) {
System.out.println("Found contracts");
}
public interface ContractSink extends Sink {
@Input("topic2")
KStream<?, ?> inputStream();
}
一个组件需要一个找不到名为“ topic2”的bean。
答案 0 :(得分:0)
最终,我找到了这个样本,这个样本困扰了我所有的问题: