多方法监听器

从 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,而不是在类上使用。