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

谢谢 .