|
对于最新稳定版本,请使用Spring AMQP 4.0.0! |
带注释端点方法签名
到目前为止,我们一直注射一个简单的方法字符串但它实际上可以有一个非常灵活的方法签名。
以下示例将其重写为注入次序带有自定义头部:
@Component
public class MyService {
@RabbitListener(queues = "myQueue")
public void processOrder(Order order, @Header("order_type") String orderType) {
...
}
}
以下列表显示了可与监听端点参数匹配的参数:
-
原始
org.springframework.amqp.core.Message. -
这
消息属性来自原始版消息. -
这
com.rabbitmq.client.Channel信息就是在该设备上接收到的。 -
这
org.springframework.messaging.Message由收到的AMQP消息转换而成。 -
@Header- 带注释的方法参数,用于提取特定头部值,包括标准AMQP头部。 -
@Headers-带注释的参数,也必须被赋值为java.util.Map为了访问所有头部。 -
改装有效载荷
一个没有注释且不是支持类型之一的元素(即,消息,消息属性,留言<?>和渠道)与有效载荷匹配。
你可以通过注释参数@Payload.
你也可以通过添加额外选项来开启验证@Valid.
注入 Spring 消息抽象的能力尤其有用,可以利用传输专用消息中存储的所有信息,而无需依赖传输专用 API。 以下示例展示了如何实现:
@RabbitListener(queues = "myQueue")
public void processOrder(Message<Order> order) { ...
}
方法参数的处理由以下方式提供DefaultMessageHandlerMethodFactory,你可以进一步自定义以支持额外的方法参数。
转换和验证支持也可以在那里进行定制。
例如,如果我们想确保我们的次序在处理之前有效,我们可以为有效载荷做注释@Valid并配置所需的验证器,具体如下:
@Configuration
@EnableRabbit
public class AppConfig implements RabbitListenerConfigurer {
@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
registrar.setMessageHandlerMethodFactory(myHandlerMethodFactory());
}
@Bean
public DefaultMessageHandlerMethodFactory myHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setValidator(myValidator());
return factory;
}
}