该版本仍在开发中,尚未被视为稳定。请使用最新的稳定版本,使用 Spring AMQP 4.0.0!spring-doc.cadn.net.cn

带注释端点方法签名

到目前为止,我们一直注射一个简单的方法字符串但它实际上可以有一个非常灵活的方法签名。 以下示例将其重写为注入次序带有自定义头部:spring-doc.cadn.net.cn

@Component
public class MyService {

    @RabbitListener(queues = "myQueue")
    public void processOrder(Order order, @Header("order_type") String orderType) {
        ...
    }
}

以下列表显示了可与监听端点参数匹配的参数:spring-doc.cadn.net.cn

一个没有注释且不是支持类型之一的元素(即,消息,消息属性,留言<?>渠道)与有效载荷匹配。 你可以通过注释参数@Payload. 你也可以通过添加额外选项来开启验证@Valid.spring-doc.cadn.net.cn

注入 Spring 消息抽象的能力尤其有用,可以利用传输专用消息中存储的所有信息,而无需依赖传输专用 API。 以下示例展示了如何实现:spring-doc.cadn.net.cn

@RabbitListener(queues = "myQueue")
public void processOrder(Message<Order> order) { ...
}

方法参数的处理由以下方式提供DefaultMessageHandlerMethodFactory,你可以进一步自定义以支持额外的方法参数。 转换和验证支持也可以在那里进行定制。spring-doc.cadn.net.cn

例如,如果我们想确保我们的次序在处理之前有效,我们可以为有效载荷做注释@Valid并配置所需的验证器,具体如下:spring-doc.cadn.net.cn

@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;
    }
}