多方法監聽器

從 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 是 Thing2CatHat,則會叫用個別的 @RabbitHandler 方法。您應該理解系統必須能夠根據 payload 類型識別唯一的方法。類型會檢查是否可指派給沒有註解或使用 @Payload 註解註解的單一參數。請注意,方法簽章與方法層級 @RabbitListener 中討論的簽章相同 (如先前所述)。

從 2.0.3 版開始,@RabbitHandler 方法可以指定為預設方法,如果其他方法沒有符合的,則會叫用此方法。最多只能指定一個方法。

@RabbitHandler 僅適用於轉換後處理訊息 payload,如果您希望接收未轉換的原始 Message 物件,則必須在方法上使用 @RabbitListener,而不是類別。