/** * Start the specified {@link MessageListenerContainer} if it should be started * on startup or when start is called explicitly after startup. * @param listenerContainer the container. * @see MessageListenerContainer#isAutoStartup() */ private void startIfNecessary(MessageListenerContainer listenerContainer) { if (this.contextRefreshed || listenerContainer.isAutoStartup()) { listenerContainer.start(); } }
@Override public boolean isRunning() { for (MessageListenerContainer listenerContainer : getListenerContainers()) { if (listenerContainer.isRunning()) { return true; } } return false; }
@Override public void stop() { for (MessageListenerContainer listenerContainer : getListenerContainers()) { listenerContainer.stop(); } }
@Test public void simpleDirectEndpoint() { MessageListenerContainer container = this.registry.getListenerContainer("direct"); assertFalse(container.isRunning()); container.start(); String reply = (String) rabbitTemplate.convertSendAndReceive("test.simple.direct", "foo"); assertThat(reply, startsWith("FOOfoo")); assertThat(reply, containsString("rabbitClientThread-")); // container runs on client thread assertThat(TestUtils.getPropertyValue(container, "consumersPerQueue"), equalTo(2)); }
public void start() { containers.forEach(container -> container.start()); }
private void setupMessageListener(MessageListenerContainer container) { MessageListener messageListener = createMessageListener(container); Assert.state(messageListener != null, () -> "Endpoint [" + this + "] must provide a non null message listener"); container.setupMessageListener(messageListener); }
@SuppressWarnings("deprecation") @Override protected MessagingMessageListenerAdapter createMessageListener(MessageListenerContainer container) { Assert.state(this.messageHandlerMethodFactory != null, "Could not create message listener - MessageHandlerMethodFactory not set"); MessagingMessageListenerAdapter messageListener = createMessageListenerInstance(); messageListener.setHandlerAdapter(configureListenerAdapter(messageListener)); String replyToAddress = getDefaultReplyToAddress(); if (replyToAddress != null) { messageListener.setResponseAddress(replyToAddress); } MessageConverter messageConverter = getMessageConverter(); if (messageConverter == null) { // fall back to the legacy converter holder in the container messageConverter = container.getMessageConverter(); } if (messageConverter != null) { messageListener.setMessageConverter(messageConverter); } if (getBeanResolver() != null) { messageListener.setBeanResolver(getBeanResolver()); } return messageListener; }
/** * Create and start a new {@link MessageListenerContainer} using the specified factory. * @param endpoint the endpoint to create a {@link MessageListenerContainer}. * @param factory the {@link RabbitListenerContainerFactory} to use. * @return the {@link MessageListenerContainer}. */ protected MessageListenerContainer createListenerContainer(RabbitListenerEndpoint endpoint, RabbitListenerContainerFactory<?> factory) { MessageListenerContainer listenerContainer = factory.createListenerContainer(endpoint); if (listenerContainer instanceof InitializingBean) { try { ((InitializingBean) listenerContainer).afterPropertiesSet(); } catch (Exception ex) { throw new BeanInitializationException("Failed to initialize message listener container", ex); } } int containerPhase = listenerContainer.getPhase(); if (containerPhase < Integer.MAX_VALUE) { // a custom phase value if (this.phase < Integer.MAX_VALUE && this.phase != containerPhase) { throw new IllegalStateException("Encountered phase mismatch between container factory definitions: " + this.phase + " vs " + containerPhase); } this.phase = listenerContainer.getPhase(); } return listenerContainer; }
public void start() { containers.forEach(container -> container.start()); }
private void setupMessageListener(MessageListenerContainer container) { MessageListener messageListener = createMessageListener(container); Assert.state(messageListener != null, () -> "Endpoint [" + this + "] must provide a non null message listener"); container.setupMessageListener(messageListener); }
@SuppressWarnings("deprecation") @Override protected MessagingMessageListenerAdapter createMessageListener(MessageListenerContainer container) { Assert.state(this.messageHandlerMethodFactory != null, "Could not create message listener - MessageHandlerMethodFactory not set"); MessagingMessageListenerAdapter messageListener = createMessageListenerInstance(); messageListener.setHandlerAdapter(configureListenerAdapter(messageListener)); String replyToAddress = getDefaultReplyToAddress(); if (replyToAddress != null) { messageListener.setResponseAddress(replyToAddress); } MessageConverter messageConverter = getMessageConverter(); if (messageConverter == null) { // fall back to the legacy converter holder in the container messageConverter = container.getMessageConverter(); } if (messageConverter != null) { messageListener.setMessageConverter(messageConverter); } if (getBeanResolver() != null) { messageListener.setBeanResolver(getBeanResolver()); } return messageListener; }
/** * Create and start a new {@link MessageListenerContainer} using the specified factory. * @param endpoint the endpoint to create a {@link MessageListenerContainer}. * @param factory the {@link RabbitListenerContainerFactory} to use. * @return the {@link MessageListenerContainer}. */ protected MessageListenerContainer createListenerContainer(RabbitListenerEndpoint endpoint, RabbitListenerContainerFactory<?> factory) { MessageListenerContainer listenerContainer = factory.createListenerContainer(endpoint); if (listenerContainer instanceof InitializingBean) { try { ((InitializingBean) listenerContainer).afterPropertiesSet(); } catch (Exception ex) { throw new BeanInitializationException("Failed to initialize message listener container", ex); } } int containerPhase = listenerContainer.getPhase(); if (containerPhase < Integer.MAX_VALUE) { // a custom phase value if (this.phase < Integer.MAX_VALUE && this.phase != containerPhase) { throw new IllegalStateException("Encountered phase mismatch between container factory definitions: " + this.phase + " vs " + containerPhase); } this.phase = listenerContainer.getPhase(); } return listenerContainer; }
/** * Start the specified {@link MessageListenerContainer} if it should be started * on startup or when start is called explicitly after startup. * @param listenerContainer the container. * @see MessageListenerContainer#isAutoStartup() */ private void startIfNecessary(MessageListenerContainer listenerContainer) { if (this.contextRefreshed || listenerContainer.isAutoStartup()) { listenerContainer.start(); } }
@Override public void stop() { for (MessageListenerContainer listenerContainer : getListenerContainers()) { listenerContainer.stop(); } }
@Override public boolean isRunning() { for (MessageListenerContainer listenerContainer : getListenerContainers()) { if (listenerContainer.isRunning()) { return true; } } return false; }
@Override public void stop(Runnable callback) { Collection<MessageListenerContainer> containers = getListenerContainers(); AggregatingCallback aggregatingCallback = new AggregatingCallback(containers.size(), callback); for (MessageListenerContainer listenerContainer : containers) { try { listenerContainer.stop(aggregatingCallback); } catch (Exception e) { if (this.logger.isWarnEnabled()) { this.logger.warn("Failed to stop listener container [" + listenerContainer + "]", e); } } } }
@Test public void testProperShutdownOnException() { ConfigurableApplicationContext context = new AnnotationConfigApplicationContext( ProperShutdownConfig.class, RabbitListenersBean.class, ClassLevelListenersBean.class); RabbitListenerEndpointRegistry listenerEndpointRegistry = context.getBean(RabbitListenerEndpointRegistry.class); // Previously this takes 30 seconds to finish (see DefaultLifecycleProcessor#timeoutPerShutdownPhase) // And not all containers has been stopped from the RabbitListenerEndpointRegistry context.close(); for (MessageListenerContainer messageListenerContainer : listenerEndpointRegistry.getListenerContainers()) { assertFalse(messageListenerContainer.isRunning()); } }
@Override public void stop(Runnable callback) { Collection<MessageListenerContainer> containers = getListenerContainers(); AggregatingCallback aggregatingCallback = new AggregatingCallback(containers.size(), callback); for (MessageListenerContainer listenerContainer : containers) { try { listenerContainer.stop(aggregatingCallback); } catch (Exception e) { if (this.logger.isWarnEnabled()) { this.logger.warn("Failed to stop listener container [" + listenerContainer + "]", e); } } } }