多方法監聽器

從 1.5.0 版本開始,您可以在類級別指定 @RabbitListener 註解。 結合新的 @RabbitHandler 註解,這使得單個偵聽器可以根據傳入訊息的有效負載型別呼叫不同的方法。 最好使用一個例子來描述

@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) {
        ...
    }

}

在這種情況下,如果轉換後的有效負載是 Thing2CatHat,則會呼叫各個 @RabbitHandler 方法。 您應該理解,系統必須能夠根據有效負載型別識別唯一的方法。 檢查該型別是否可分配給沒有註解或使用 @Payload 註解的單個引數。 請注意,方法簽名與方法級別的 @RabbitListener 中討論的相同(如前所述)。

從 2.0.3 版本開始,可以將 @RabbitHandler 方法指定為預設方法,如果沒有其他方法匹配,則會呼叫該方法。 最多可以指定一個方法。

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