/** Instruments an existing {@linkplain SimpleRabbitListenerContainerFactory} */ public SimpleRabbitListenerContainerFactory decorateSimpleRabbitListenerContainerFactory( SimpleRabbitListenerContainerFactory factory ) { Advice[] chain = factory.getAdviceChain(); TracingRabbitListenerAdvice tracingAdvice = new TracingRabbitListenerAdvice(this); // If there are no existing advice, return only the tracing one if (chain == null) { factory.setAdviceChain(tracingAdvice); return factory; } // If there is an existing tracing advice return for (Advice advice : chain) { if (advice instanceof TracingRabbitListenerAdvice) { return factory; } } // Otherwise, add ours and return Advice[] newChain = new Advice[chain.length + 1]; System.arraycopy(chain, 0, newChain, 0, chain.length); newChain[chain.length] = tracingAdvice; factory.setAdviceChain(newChain); return factory; }
/** Creates an instrumented {@linkplain SimpleRabbitListenerContainerFactory} */ public SimpleRabbitListenerContainerFactory newSimpleRabbitListenerContainerFactory( ConnectionFactory connectionFactory ) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setAdviceChain(new TracingRabbitListenerAdvice(this)); return factory; }
private void registerTracingInterceptor(SimpleRabbitListenerContainerFactory factory) { Advice[] chain = factory.getAdviceChain(); Advice[] adviceChainWithTracing = getAdviceChainOrAddInterceptorToChain(chain); factory.setAdviceChain(adviceChainWithTracing); }