我試圖使用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'。 –