我正在尝试使用SpringCloudStream在kafka上发送和接收消息。这方面的示例使用了一个简单的示例,即使用时间戳作为消息。当我在inboundchanneladapter docs上遇到这个拦截器时,我正试图更深入地了解真实世界的应用程序:
“用@inboundchanneladapter注解的方法不能接受任何参数”
我试着这样使用它:
@InboundChannelAdapter(value = ChannelManager.OUTPUT)
public EventCreated createCustomerEvent(String customerId, String thingId) {
return new EventCreated(customerId, thingId);
}
我缺少什么用法?我设想,当您想要创建一个事件时,您有一些数据要用于该事件,因此您通常会通过参数传递这些数据。但是“用@inboundchanneladapter注解的方法不能接受任何参数”。你该怎么用这个?
我知道@inboundchanneladapter来自spring集成,spring云流扩展了spring集成,因此spring集成可能有一个不同的上下文,这是有意义的。但这对我来说似乎不太直观(对于输出/生产者/源使用\u入站\u通道适配器也是如此)
2条答案
按热度按时间mnemlml81#
您希望如何调用该方法?我认为你的陈述“流扩展集成”有一个错误的沟通,artem可能理解我们扩展了
@InboundChannelAdatper
因此,如果您正在主动调用这个方法,因为您确实有传递给它的参数,那么为什么不直接使用源通道来发送数据呢?通常,源代码不需要参数,因为它们要么像推送twitter流那样点击twitter,侦听事件并将其推送到源通道,要么被轮询,在这种情况下,它们在通过轮询器定义的间隔上被调用。
正如artem所指出的,如果您打算从业务流调用这个方法,并在触发消息流的同时处理返回,那么请检查文档中的链接。
roqulrg32#
好吧,首先
@InboundChannelAdapter
是在spring集成中精确定义的,spring云流没有扩展它。那是假的。不知道你从哪里得到的信息。。。这个注解构建了
SourcePollingChannelAdapter
它提供了一个基于调度器的轮询器,并定期调用MessageSource.receive()
. 由于没有任何上下文,并且最终用户不能用自己的参数影响poller的行为,所以对空方法参数的要求是显而易见的。这个
@InboundChannelAdapter
是流的开始,它是活动的。它在没有你的事件的背景下进行逻辑。如果您想用参数调用某个方法并用该流触发,您应该考虑使用
@MessagingGateway
: http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#messaging-网关注解