在Spring Cloud Stream 2.0中发送消息时,@ InboundChannelAdapter与MessageChannel的区别

时间:2018-03-30 10:22:01

标签: spring-cloud-stream

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

感谢。

0 个答案:

没有答案