多方法監聽器
從版本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) {
...
}
}
在這種情況下,如果轉換後的負載是Thing2、Cat或Hat,則會呼叫各個@RabbitHandler方法。你應該明白,系統必須能夠根據負載型別識別出唯一的方法。型別會檢查其是否可賦值給一個沒有註解或用@Payload註解的單一引數。請注意,與方法級別的@RabbitListener(之前描述過)討論的方法簽名相同。
從版本2.0.3開始,可以將@RabbitHandler方法指定為預設方法,如果其他方法不匹配,則會呼叫此方法。最多隻能有一個方法被如此指定。
@RabbitHandler僅用於在轉換後處理訊息負載,如果你希望接收未轉換的原始Message物件,則必須在方法而不是類上使用@RabbitListener。 |