|
请使用 Spring AMQP 4.0.2(最新稳定版本)! |
多方法监听器
从版本 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,而非在类上。 |