|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
带注释的端点方法签名
到目前为止,我们一直在注入一个简单的String但是它实际上可以有一个非常灵活的方法签名。
以下示例重写它以注入Order使用自定义标头:
@Component
public class MyService {
@RabbitListener(queues = "myQueue")
public void processOrder(Order order, @Header("order_type") String orderType) {
...
}
}
以下列表显示了可与侦听器终端节点中的参数匹配的参数:
-
生的
org.springframework.amqp.core.Message. -
这
MessageProperties从原始Message. -
这
com.rabbitmq.client.Channel收到消息的 ON 上。 -
这
org.springframework.messaging.Message从传入的 AMQP 消息转换而来。 -
@Header-annotated 方法参数来提取特定的标头值,包括标准 AMQP 标头。 -
@Headers-annotated 参数,该参数也必须可分配给java.util.Map以获取对所有标头的访问权限。 -
转换后的有效负载
不是受支持类型之一的非带注释的元素(即Message,MessageProperties,Message<?>和Channel) 与负载匹配。
您可以通过使用@Payload.
您还可以通过添加额外的@Valid.
注入 Spring 的消息抽象的能力特别有用,它可以从存储在特定于传输的消息中的所有信息中受益,而无需依赖特定于传输的 API。 以下示例显示了如何执行此作:
@RabbitListener(queues = "myQueue")
public void processOrder(Message<Order> order) { ...
}
方法参数的处理由DefaultMessageHandlerMethodFactory,您可以进一步自定义它以支持其他方法参数。
转换和验证支持也可以在其中进行自定义。
例如,如果我们想确保我们的Order有效,我们可以用@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;
}
}