/** Creates an instrumented {@linkplain SimpleRabbitListenerContainerFactory} */ public SimpleRabbitListenerContainerFactory newSimpleRabbitListenerContainerFactory( ConnectionFactory connectionFactory ) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setAdviceChain(new TracingRabbitListenerAdvice(this)); return factory; }
/** 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; }
@Bean @ConditionalOnProperty(prefix = "spring.rabbitmq", name = "host") public SimpleRabbitListenerContainerFactory myContainerFactory( SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setPrefetchCount(100); configurer.configure(factory, connectionFactory); return factory; }
private void initRabbitMQ() throws URISyntaxException { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(new URI(host)); Map<String, Object> cmdQueueArgs = new HashMap<>(); cmdQueueArgs.put("x-max-length", maxSize); cmdQueueArgs.put("x-max-priority", maxPriority); Queue cmdQueue = new Queue(name, true, false, false, cmdQueueArgs); RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); rabbitAdmin.declareQueue(cmdQueue); // setup listener container factory SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setConcurrentConsumers(DEFAULT_CONCURRENCY); factory.setMaxConcurrentConsumers(DEFAULT_CONCURRENCY); factory.setTaskExecutor(executor); factory.setAutoStartup(false); // setup rabbit template template = new RabbitTemplate(connectionFactory); template.setQueue(name); // setup container SimpleRabbitListenerEndpoint simpleEndpoint = new SimpleRabbitListenerEndpoint(); simpleEndpoint.setMessageListener(new RabbitMessageListener()); container = factory.createListenerContainer(simpleEndpoint); container.setQueueNames(name); log.trace("RabbitMQ initialized on '{}' with queue name '{}'", host, name); }
public void init() { registerBeanDefinitionParser("queue", new QueueParser()); registerBeanDefinitionParser("direct-exchange", new DirectExchangeParser()); registerBeanDefinitionParser("topic-exchange", new TopicExchangeParser()); registerBeanDefinitionParser("fanout-exchange", new FanoutExchangeParser()); registerBeanDefinitionParser("headers-exchange", new HeadersExchangeParser()); registerBeanDefinitionParser("listener-container", new ListenerContainerParser()); registerBeanDefinitionParser("admin", new AdminParser()); registerBeanDefinitionParser("connection-factory", new ConnectionFactoryParser()); registerBeanDefinitionParser("template", new TemplateParser()); registerBeanDefinitionParser("queue-arguments", new QueueArgumentsParser()); registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenParser()); }
@Override public StatefulRetryOperationsInterceptor build() { this.applyCommonSettings(this.factoryBean); if (this.messageKeyGenerator != null) { this.factoryBean.setMessageKeyGenerator(this.messageKeyGenerator); } if (this.newMessageIdentifier != null) { this.factoryBean.setNewMessageIdentifier(this.newMessageIdentifier); } return this.factoryBean.getObject(); }
private SimpleRabbitListenerEndpoint createEndpoint(String id, String queueName) { SimpleRabbitListenerEndpoint endpoint = new SimpleRabbitListenerEndpoint(); endpoint.setId(id); endpoint.setQueueNames(queueName); return endpoint; }
protected void applyCommonSettings(AbstractRetryOperationsInterceptorFactoryBean factoryBean) { if (this.messageRecoverer != null) { factoryBean.setMessageRecoverer(this.messageRecoverer); } if (this.retryOperations != null) { factoryBean.setRetryOperations(this.retryOperations); } else { factoryBean.setRetryOperations(this.retryTemplate); } }
@Override public RetryOperationsInterceptor build() { this.applyCommonSettings(this.factoryBean); return this.factoryBean.getObject(); }
@Override protected Class<?> getBeanClass(Element element) { if (NamespaceUtils.isAttributeDefined(element, NAME_ATTRIBUTE)) { return Queue.class; } else { return AnonymousQueue.class; } }
/** * Apply a Message recoverer - default is to log and discard after retry is exhausted. * @param recoverer The recoverer. * @return this. */ public B recoverer(MessageRecoverer recoverer) { this.messageRecoverer = recoverer; return _this(); }
/** * Create a builder for a stateless retry interceptor. * @return The interceptor builder. */ public static StatelessRetryInterceptorBuilder stateless() { return new StatelessRetryInterceptorBuilder(); }
/** * Create a builder for a stateful retry interceptor. * @return The interceptor builder. */ public static StatefulRetryInterceptorBuilder stateful() { return new StatefulRetryInterceptorBuilder(); }
public void init() { registerBeanDefinitionParser("queue", new QueueParser()); registerBeanDefinitionParser("direct-exchange", new DirectExchangeParser()); registerBeanDefinitionParser("topic-exchange", new TopicExchangeParser()); registerBeanDefinitionParser("fanout-exchange", new FanoutExchangeParser()); registerBeanDefinitionParser("headers-exchange", new HeadersExchangeParser()); registerBeanDefinitionParser("listener-container", new ListenerContainerParser()); registerBeanDefinitionParser("admin", new AdminParser()); registerBeanDefinitionParser("connection-factory", new ConnectionFactoryParser()); registerBeanDefinitionParser("template", new TemplateParser()); registerBeanDefinitionParser("queue-arguments", new QueueArgumentsParser()); registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenParser()); }
/** * My container factory simple rabbit listener container factory. * * @param configurer the configurer * @param connectionFactory the connection factory * @return the simple rabbit listener container factory */ @Bean @ConditionalOnProperty(prefix = "spring.rabbitmq", name = "host") public SimpleRabbitListenerContainerFactory myContainerFactory( SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setPrefetchCount(100); configurer.configure(factory, connectionFactory); return factory; }
@Override public StatefulRetryOperationsInterceptor build() { this.applyCommonSettings(this.factoryBean); if (this.messageKeyGenerator != null) { this.factoryBean.setMessageKeyGenerator(this.messageKeyGenerator); } if (this.newMessageIdentifier != null) { this.factoryBean.setNewMessageIdentifier(this.newMessageIdentifier); } return this.factoryBean.getObject(); }
@Override public RetryOperationsInterceptor build() { this.applyCommonSettings(this.factoryBean); return this.factoryBean.getObject(); }
@Override protected Class<?> getBeanClass(Element element) { if (NamespaceUtils.isAttributeDefined(element, NAME_ATTRIBUTE)) { return Queue.class; } else { return AnonymousQueue.class; } }
/** * Apply a Message recoverer - default is to log and discard after retry is exhausted. * @param recoverer The recoverer. * @return this. */ public B recoverer(MessageRecoverer recoverer) { this.messageRecoverer = recoverer; return _this(); }
/** * My container factory simple rabbit listener container factory. * * @param configurer the configurer * @param connectionFactory the connection factory * @return the simple rabbit listener container factory */ @Bean @ConditionalOnProperty(prefix = "spring.rabbitmq", name = "host") public SimpleRabbitListenerContainerFactory myContainerFactory( SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setPrefetchCount(100); configurer.configure(factory, connectionFactory); return factory; }