多方法监听器
从 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 方法可以被指定为默认方法,当其他方法都不匹配时就会调用它。最多只能有一个方法被这样指定。
important
@RabbitHandler 仅用于在转换之后处理消息载荷;如果你希望接收未转换的原始 Message 对象,必须在方法上(而非类上)使用 @RabbitListener。