我尝试了两种方法在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,但需要澄清 .
谢谢 .