多方法监听器
从版本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。 |