对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

多方法侦听器

从 1.5.0 版开始,您可以指定@RabbitListener类级别的注释。 与新的@RabbitHandler注释,这允许单个侦听器调用不同的方法,基于 传入消息的有效负载类型。 最好用一个例子来描述这一点:spring-doc.cadn.net.cn

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

}

在这种情况下,个人@RabbitHandler如果转换后的有效负载是Thing2一个CatHat. 您应该了解,系统必须能够根据有效负载类型识别唯一的方法。 检查类型是否可分配给没有注释或使用@Payload注解。 请注意,相同的方法签名适用,如方法级@RabbitListener (前面描述)。spring-doc.cadn.net.cn

从 2.0.3 版开始,@RabbitHandlermethod 可以指定为默认方法,如果其他方法没有匹配项,则调用该方法。 最多只能指定一种方法。spring-doc.cadn.net.cn

@RabbitHandler仅用于在转换后处理消息有效负载,如果您希望接收未转换的原始数据Message对象,您必须使用@RabbitListener在方法上,而不是类上。