多方法監聽器
從 1.5.0 版開始,您可以在類別層級指定 @RabbitListener
註解。結合新的 @RabbitHandler
註解,這讓單一監聽器可以根據傳入訊息的 payload 類型,叫用不同的方法。最好使用範例來說明
@RabbitListener(id="multi", queues = "someQueue")
@SendTo("my.reply.queue")
public class MultiListenerBean {
@RabbitHandler
public String thing2(Thing2 thing2) {
...
}
@RabbitHandler
public String cat(Cat cat) {
...
}
@RabbitHandler
public String hat(@Header("amqp_receivedRoutingKey") String rk, @Payload Hat hat) {
...
}
@RabbitHandler(isDefault = true)
public String defaultMethod(Object object) {
...
}
}
在此案例中,如果轉換後的 payload 是 Thing2
、Cat
或 Hat
,則會叫用個別的 @RabbitHandler
方法。您應該理解系統必須能夠根據 payload 類型識別唯一的方法。類型會檢查是否可指派給沒有註解或使用 @Payload
註解註解的單一參數。請注意,方法簽章與方法層級 @RabbitListener
中討論的簽章相同 (如先前所述)。
從 2.0.3 版開始,@RabbitHandler
方法可以指定為預設方法,如果其他方法沒有符合的,則會叫用此方法。最多只能指定一個方法。
@RabbitHandler 僅適用於轉換後處理訊息 payload,如果您希望接收未轉換的原始 Message 物件,則必須在方法上使用 @RabbitListener ,而不是類別。 |