我试图使用spring集成实现注释驱动事件总线(例如Guava Event Bus)。 我有一个发布订阅通道我在那里发布我的活动,其想法是使用注解为@ServiceActivator的方法作为事件处理程序。 每种方法都可以根据需要处理的事件(有效负载)拥有不同的签名。多个@ServiceActivator方法具有相同的inputChannel和不同的签名
我注意到的是,当事件被发布,由ServiceActivatorAnnotationPostProcessor创建ServiceActivatingHandler的所有实例调用,对于具有不有效载荷匹配签名中的每个方法的异常。例如。
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 8): Method call: Method handle(model.api.ServiceAvailableEvent) cannot be found on service.eai.TestServiceActivatorImpl2 type
有没有一种方式来定义仅适用于特定类型的有效载荷一个@ServiceActivator方法?
好的,谢谢你,我误解了这种模式。我会想象,同样的理性适用于网关。也就是说,所有使用“@Gateway”注解的方法都是订阅相同的requestChannel,并且必须使用相同的有效内容。我对么? –
请注意,如果同一类中有多个方法具有不同的签名,则框架将调用匹配有效负载的方法 - 只要它们是唯一且明确的。没有;具有不同签名的多个网关方法可以发布到相同的频道。 –
'@网关'是一个完全不同的故事。它不是关于*订阅*,而是*发布*。 'requestChannel'用于通过网关的方法调用发送消息。对于不同的'@ Gateway',这可以是相同的频道,但是您应该确切地将它们的参数计为发送消息的'payload'。 –