|
该版本仍在开发中,尚未被视为稳定。请使用最新的稳定版本,使用 Spring AMQP 4.0.0! |
代理@RabbitListener以及通用药
如果您的服务旨在代理(例如,在@Transactional),当界面具有通用参数时,你应注意一些考虑因素考虑以下示例:
interface TxService<P> {
String handle(P payload, String header);
}
static class TxServiceImpl implements TxService<Foo> {
@Override
@RabbitListener(...)
public String handle(Thing thing, String rk) {
...
}
}
对于通用接口和特定实现,你被迫切换到 CGLIB 目标类代理,因为接口的实际实现处理方法是一种桥接方法。在事务管理的情况下,CGLIB的使用通过使用注释选项进行配置:@EnableTransactionManagement(proxyTargetClass = true). 在这种情况下,所有注释都必须在实现中的目标方法上声明,如下示例所示:
static class TxServiceImpl implements TxService<Foo> {
@Override
@Transactional
@RabbitListener(...)
public String handle(@Payload Foo foo, @Header("amqp_receivedRoutingKey") String rk) {
...
}
}