RabbitMQ Failed to declare queue and Listener is not able to get queue on server

27,821

This problem was not there when i was declaring queue in default virtual host. But when i added virtual host foo all of it sudden stopped working.

Does the user that accesses the new virtual host have configure permissions? Configure permissions are required to declare queues.

A RabbitAdmin is required to declare the queues/bindings; the container only does a passive declaration to check the queue is present.

EDIT

container.start();

You must not start() the container within a bean definition. The application context will do that after the application context is completely built, if the container's autoStartUp is true (default).

It is clear from your logs that the container is starting too early - before the other beans (admin, queue etc) have been declared.

Share:
27,821
Aditya Ekbote
Author by

Aditya Ekbote

Core , Advanced Java Programmer with knowledge of struts 2.0, hibernate. I am professional person willing to gain and spread knowledge. I believe why reinvent the wheel if there are much more Solutions to programming problems. So I do love Stack Overflow.

Updated on March 18, 2020

Comments

  • Aditya Ekbote
    Aditya Ekbote about 4 years

    I have spring boot rabbitmq application where i have to send an Employee object to queue. Then i have set up a listener application. Do some processing on employee object and put this object in call back queue.

    For this, i have created below objects in my appication.

    1. Created ConnectionFactory.
    2. Created RabbitAdmin object using ConnectionFactory..
    3. Request Queue.
    4. Callback Queue.
    5. Direct Exchange.
    6. Request Queue Binding.
    7. Callback Queue Binding.
    8. MessageConverter.
    9. RabbitTemplate object.
    10. And finally object of SimpleMessageListenerContainer.

    My Application files looks like below.

    application.properties

    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    spring.rabbitmq.virtual-host=foo
    emp.rabbitmq.directexchange=EMP_EXCHANGE1
    emp.rabbitmq.requestqueue=EMP_QUEUE1
    emp.rabbitmq.routingkey=EMP_ROUTING_KEY1
    

    MainClass.java

    package com.employee;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MainClass {
    
        public static void main(String[] args) {
            SpringApplication.run(
                    MainClass.class, args);
        }
    }
    

    ApplicationContextProvider.java

    package com.employee.config;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.context.ConfigurableApplicationContext;
    
    public class ApplicationContextProvider implements ApplicationContextAware {
        private static ApplicationContext context;
    
        public ApplicationContext getApplicationContext(){
            return context;
        }
    
        @Override
        public void setApplicationContext(ApplicationContext arg0) throws BeansException {
            context = arg0;
    
        }
    
        public Object getBean(String name){
            return context.getBean(name, Object.class);
        }
    
        public void addBean(String beanName, Object beanObject){
            ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext)context).getBeanFactory();
            beanFactory.registerSingleton(beanName, beanObject);
        }
    
        public void removeBean(String beanName){
            BeanDefinitionRegistry reg = (BeanDefinitionRegistry) context.getAutowireCapableBeanFactory();
            reg.removeBeanDefinition(beanName);
        }
    }
    

    Constants.java

    package com.employee.constant;
    
    public class Constants {
    
        public static final String CALLBACKQUEUE = "_CBQ";
    
    }
    

    Employee.java

    package com.employee.model;
    
    import com.fasterxml.jackson.annotation.JsonIdentityInfo;
    import com.fasterxml.jackson.annotation.ObjectIdGenerators;
    
    @JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id", scope = Employee.class)
    public class Employee {
    
        private String empName;
        private String empId;
        private String changedValue;
        public String getEmpName() {
            return empName;
        }
        public void setEmpName(String empName) {
            this.empName = empName;
        }
        public String getEmpId() {
            return empId;
        }
        public void setEmpId(String empId) {
            this.empId = empId;
        }
        public String getChangedValue() {
            return changedValue;
        }
        public void setChangedValue(String changedValue) {
            this.changedValue = changedValue;
        }
    
    
    }
    

    EmployeeProducerInitializer.java

    package com.employee.config;
    
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.BindingBuilder;
    import org.springframework.amqp.core.DirectExchange;
    import org.springframework.amqp.core.Queue;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.core.RabbitAdmin;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
    import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
    import org.springframework.amqp.support.converter.MessageConverter;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    import com.employee.constant.Constants;
    import com.employee.service.EmployeeResponseReceiver;
    
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan(value="com.en.*")
    public class EmployeeProducerInitializer {
    
        @Value("${emp.rabbitmq.requestqueue}")
        String requestQueueName;
    
        @Value("${emp.rabbitmq.directexchange}")
        String directExchange;
    
        @Value("${emp.rabbitmq.routingkey}")
        private String requestRoutingKey;
    
        @Autowired
        private ConnectionFactory rabbitConnectionFactory;
    
        @Bean
        ApplicationContextProvider applicationContextProvider(){
            System.out.println("inside app ctx provider");
            return new ApplicationContextProvider();
        };
    
        @Bean
        RabbitAdmin rabbitAdmin(){
            System.out.println("inside rabbit admin");
            return new RabbitAdmin(rabbitConnectionFactory);
        };
    
        @Bean
        Queue empRequestQueue() {
            System.out.println("inside request queue");
            return new Queue(requestQueueName, true);
        }
    
        @Bean
        Queue empCallBackQueue() {
            System.out.println("inside call back queue");
            return new Queue(requestQueueName + Constants.CALLBACKQUEUE, true);
        }
    
        @Bean
        DirectExchange empDirectExchange() {
            System.out.println("inside exchange");
            return new DirectExchange(directExchange);
        }
    
        @Bean
        Binding empRequestBinding() {
            System.out.println("inside request binding");
            return BindingBuilder.bind(empRequestQueue()).to(empDirectExchange()).with(requestRoutingKey);
        }
    
        @Bean
        Binding empCallBackBinding() {
            return BindingBuilder.bind(empCallBackQueue()).to(empDirectExchange()).with(requestRoutingKey + Constants.CALLBACKQUEUE);
        }
    
        @Bean
        public MessageConverter jsonMessageConverter(){
            System.out.println("inside json msg converter");
            return new Jackson2JsonMessageConverter();
        }
    
        @Bean
        public RabbitTemplate empFixedReplyQRabbitTemplate() {
            System.out.println("inside rabbit template");
            RabbitTemplate template = new RabbitTemplate(this.rabbitConnectionFactory);
            template.setExchange(empDirectExchange().getName());
            template.setRoutingKey(requestRoutingKey);
            template.setMessageConverter(jsonMessageConverter());
            template.setReceiveTimeout(100000);
            template.setReplyTimeout(100000);
    
            return template;
        }
    
        @Bean
        public SimpleMessageListenerContainer empReplyListenerContainer() {
            System.out.println("inside listener");
            SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
            try{
                container.setConnectionFactory(this.rabbitConnectionFactory);
                container.setQueues(empCallBackQueue());
                container.setMessageListener(new EmployeeResponseReceiver());
                container.setMessageConverter(jsonMessageConverter());
                container.setConcurrentConsumers(10);
                container.setMaxConcurrentConsumers(20);
                container.start();
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                System.out.println("inside listener finally");
            }
    
            return container;
        }
    
        @Autowired
        @Qualifier("empReplyListenerContainer")
        private SimpleMessageListenerContainer empReplyListenerContainer;
    }
    

    EmployeeResponseReceiver.java

    package com.employee.service;
    
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.stereotype.Component;
    
    import com.employee.config.ApplicationContextProvider;
    import com.employee.model.Employee;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.rabbitmq.client.Channel;
    
    @Component
    @EnableAutoConfiguration
    public class EmployeeResponseReceiver implements ChannelAwareMessageListener {
    
        ApplicationContextProvider applicationContextProvider = new ApplicationContextProvider();
    
        String msg = null;
        ObjectMapper mapper = new ObjectMapper();
        Employee employee = null;
    
        @Override
        public void onMessage(Message message, Channel arg1) throws Exception {
            try {
                msg = new String(message.getBody());
                System.out.println("Received Message : " + msg);
    
                employee = mapper.readValue(msg, Employee.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
    

    The problem is whenever i start my application, i get below exceptions.

    2018-03-17 14:18:36.695  INFO 12472 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2018-03-17 14:18:36.696  INFO 12472 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 5060 ms
    2018-03-17 14:18:37.004  INFO 12472 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
    2018-03-17 14:18:37.010  INFO 12472 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
    2018-03-17 14:18:37.010  INFO 12472 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
    2018-03-17 14:18:37.011  INFO 12472 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
    2018-03-17 14:18:37.011  INFO 12472 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
    inside listener
    inside call back queue
    inside json msg converter
    2018-03-17 14:18:37.576  INFO 12472 --- [cTaskExecutor-8] o.s.a.r.c.CachingConnectionFactory       : Created new connection: SimpleConnection@3d31af39 [delegate=amqp://[email protected]:5672/foo, localPort= 50624]
    2018-03-17 14:18:37.654  WARN 12472 --- [cTaskExecutor-7] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.655  WARN 12472 --- [cTaskExecutor-6] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.655  WARN 12472 --- [cTaskExecutor-5] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.655  WARN 12472 --- [cTaskExecutor-3] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.657  WARN 12472 --- [cTaskExecutor-1] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.658  WARN 12472 --- [cTaskExecutor-8] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.661  WARN 12472 --- [cTaskExecutor-2] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.660  WARN 12472 --- [cTaskExecutor-4] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.661  WARN 12472 --- [cTaskExecutor-9] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.666  WARN 12472 --- [TaskExecutor-10] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:18:37.667  WARN 12472 --- [cTaskExecutor-2] o.s.a.r.listener.BlockingQueueConsumer   : Queue declaration failed; retries left=3
    
    org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException: Failed to declare queue(s):[EMP_QUEUE1_CBQ]
        at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:636) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:535) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1389) [spring-rabbit-1.7.2.RELEASE.jar:na]
        at java.lang.Thread.run(Unknown Source) [na:1.8.0_151]
    Caused by: java.io.IOException: null
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:105) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:101) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:123) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:992) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:50) ~[amqp-client-4.0.2.jar:4.0.2]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_151]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:955) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        at com.sun.proxy.$Proxy58.queueDeclarePassive(Unknown Source) ~[na:na]
        at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:615) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        ... 3 common frames omitted
    Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'EMP_QUEUE1_CBQ' in vhost 'foo', class-id=50, method-id=10)
        at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:32) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:366) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:229) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:117) ~[amqp-client-4.0.2.jar:4.0.2]
        ... 12 common frames omitted
    Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'EMP_QUEUE1_CBQ' in vhost 'foo', class-id=50, method-id=10)
        at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:505) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:336) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:143) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:90) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:634) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:572) ~[amqp-client-4.0.2.jar:4.0.2]
        ... 1 common frames omitted
    
    2018-03-17 14:08:36.689  WARN 11076 --- [cTaskExecutor-4] o.s.a.r.listener.BlockingQueueConsumer   : Failed to declare queue:EMP_QUEUE1_CBQ
    2018-03-17 14:08:36.695 ERROR 11076 --- [cTaskExecutor-4] o.s.a.r.l.SimpleMessageListenerContainer : Consumer received fatal exception on startup
    
    org.springframework.amqp.rabbit.listener.QueuesNotAvailableException: Cannot prepare queue for listener. Either the queue doesn't exist or the broker will not allow us to use it.
        at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:563) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1389) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        at java.lang.Thread.run(Unknown Source) [na:1.8.0_151]
    Caused by: org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException: Failed to declare queue(s):[EMP_QUEUE1_CBQ]
        at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:636) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:535) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        ... 2 common frames omitted
    Caused by: java.io.IOException: null
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:105) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:101) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:123) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:992) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:50) ~[amqp-client-4.0.2.jar:4.0.2]
        at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_151]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:955) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        at com.sun.proxy.$Proxy58.queueDeclarePassive(Unknown Source) ~[na:na]
        at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:615) ~[spring-rabbit-1.7.2.RELEASE.jar:na]
        ... 3 common frames omitted
    Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'EMP_QUEUE1_CBQ' in vhost 'foo', class-id=50, method-id=10)
        at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:32) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:366) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:229) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:117) ~[amqp-client-4.0.2.jar:4.0.2]
        ... 11 common frames omitted
    Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'EMP_QUEUE1_CBQ' in vhost 'foo', class-id=50, method-id=10)
        at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:505) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:336) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:143) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:90) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:634) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:572) ~[amqp-client-4.0.2.jar:4.0.2]
        ... 1 common frames omitted
    
    2018-03-17 14:08:36.697  INFO 11076 --- [TaskExecutor-10] o.s.a.r.l.SimpleMessageListenerContainer : Successfully waited for workers to finish.
    2018-03-17 14:08:36.699  INFO 11076 --- [cTaskExecutor-5] o.s.a.r.l.SimpleMessageListenerContainer : Successfully waited for workers to finish.
    2018-03-17 14:08:36.700  INFO 11076 --- [cTaskExecutor-1] o.s.a.r.l.SimpleMessageListenerContainer : Successfully waited for workers to finish.
    2018-03-17 14:08:36.701  INFO 11076 --- [cTaskExecutor-3] o.s.a.r.l.SimpleMessageListenerContainer : Successfully waited for workers to finish.
    2018-03-17 14:08:36.700  INFO 11076 --- [cTaskExecutor-2] o.s.a.r.l.SimpleMessageListenerContainer : Successfully waited for workers to finish.
    2018-03-17 14:08:36.702  INFO 11076 --- [cTaskExecutor-7] o.s.a.r.l.SimpleMessageListenerContainer : Successfully waited for workers to finish.
    2018-03-17 14:08:36.765 ERROR 11076 --- [cTaskExecutor-8] o.s.a.r.l.SimpleMessageListenerContainer : Stopping container from aborted consumer
    2018-03-17 14:08:36.766 ERROR 11076 --- [cTaskExecutor-6] o.s.a.r.l.SimpleMessageListenerContainer : Stopping container from aborted consumer
    2018-03-17 14:08:36.779 ERROR 11076 --- [cTaskExecutor-9] o.s.a.r.l.SimpleMessageListenerContainer : Stopping container from aborted consumer
    2018-03-17 14:08:36.791 ERROR 11076 --- [cTaskExecutor-4] o.s.a.r.l.SimpleMessageListenerContainer : Stopping container from aborted consumer
    inside app ctx provider
    inside rabbit admin
    inside exchange
    inside request queue
    inside request binding
    inside rabbit template
    2018-03-17 14:08:38.978  INFO 11076 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@33b37288: startup date [Sat Mar 17 14:08:16 IST 2018]; root of context hierarchy
    2018-03-17 14:08:39.395  INFO 11076 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
    2018-03-17 14:08:39.398  INFO 11076 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
    2018-03-17 14:08:39.663  INFO 11076 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    2018-03-17 14:08:39.663  INFO 11076 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    2018-03-17 14:08:39.826  INFO 11076 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    2018-03-17 14:08:40.648  INFO 11076 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
    2018-03-17 14:08:40.677  INFO 11076 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'rabbitConnectionFactory' has been autodetected for JMX exposure
    2018-03-17 14:08:40.685  INFO 11076 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Located managed bean 'rabbitConnectionFactory': registering with JMX server as MBean [org.springframework.amqp.rabbit.connection:name=rabbitConnectionFactory,type=CachingConnectionFactory]
    2018-03-17 14:08:40.746  INFO 11076 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase -2147482648
    2018-03-17 14:08:40.747  INFO 11076 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483647
    2018-03-17 14:08:41.258  INFO 11076 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
    2018-03-17 14:08:41.270  INFO 11076 --- [           main] com.employee.MainClass                   : Started MainClass in 26.141 seconds (JVM running for 28.02)
    

    Can anybody help me resolving my issue? As per my understanding, when object of SimpleMessageListenerContainer is being created, callback queue is not created on rabbitmq server. I tried declaring queue using RabbitAdmin object, but then execution stops and nothing goes ahead. This problem was not there when i was declaring queue in default virtual host. But when i added virtual host foo all of it sudden stopped working. You can replicate this issue using above code. I have pasted all my code. Kindly let me know if anything else is to be posted.

    Interesting point is even if i am getting this exceptions, my application is up and running. That means somehow my callback queue is created and object of SimpleMessageListenerContainer gets the queue. I read somewhere that, when queue is created, my SimpleMessageListenerContainer object will listen to it.

    Please help me resolving this issue.

  • Aditya Ekbote
    Aditya Ekbote about 6 years
    Yes sir. the user have permissions to declare the queue with admin privilege. Let me know if you can replicate the issue with provided code.
  • Gary Russell
    Gary Russell about 6 years
    The problem is you are starting the container too early - see my edit.
  • Aditya Ekbote
    Aditya Ekbote about 6 years
    Hi Garry. Thanks. I got it. I removed start method call and its working now. I searched more on that, when bean is declared, queue is getting created passively. And it will get active when my app ctx is loaded properly.