多方法監聽器

從版本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
© . This site is unofficial and not affiliated with VMware.