我尝试了两种方法在Spring Cloud Stream 2.0 RC3中发送消息。
使用MessageChannel
发送消息。
public interface Chan {
@Output
MessageChannel sender();
}
@SpringBootApplication
@EnableBinding(Chan.class)
public class TestApplication {
@Autowired
private Chan chan;
public void sendMessage {
chan.sender().send(MessageBuilder.withPayload(obj).build());
}
}
另一种用途InboundChannelAdapter
@Bean
@InboundChannelAdapter(channel="sender")
public MessageSource<Object> sendMessage() {
return () ->
new GenericMessage<>(obj);
}
将java对象作为有效负载发送时,这两种方法的行为方式不同。第一种方法(使用MessageChannel
)使消费者能够接收java对象,例如
@StreamListener(Sink.INPUT)
public void handle(Object obj) {
System.out.println("Received: " + obj);
}
打印出obj的属性。
虽然第二种方法(使用InboundChannelAdapter
)让使用者收到一个空对象(无法将json字符串转换为pojo对象?)
我想差异可能来自MessageConverters,但需要澄清。
感谢。