operation queue.declare caused a channel exception not_found: no queue 'result.queue' in vhost '/'

755 views
Skip to first unread message

martin moris

unread,
Sep 10, 2020, 6:05:16 AM9/10/20
to rabbitmq-users
I define two queue 'request.queue' and 'result.queue' , my web ui produce message in request.queue and then my python app consume from request.queue and start processing and then result push into result.queue and finally result from result.queue show to user like this link. It works in my labtop very well but when i put my all code into server, it dose not work and throw an exception :(  "operation queue.declare caused a channel exception not_found: no queue 'result.queue' in vhost '/'"
and another log:
SimpleMessageListenerContainer : Broker not available; cannot force queue declarations during start: java.net.ConnectException: Connection refused (Connection refused)

Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'result.queue' in vhost '/', class-id=50, method-id=10)

anyone can help me why my code on server throw an exception?

my java code for  declare queues is here:

@Configuration
public class RequestConfiguration extends RabbitMqConfiguration {
    
    @Value("${spring.rabbitmq.queue}")
    String queueName;

    @Value("${spring.rabbitmq.exchange}")
    String exchange;

    @Value("${spring.rabbitmq.routingkey}")
    String routingkey;

    @Bean
    Queue queue() {
        return new Queue(queueName, true);
   }

    @Bean
    DirectExchange exchange() {
        return new DirectExchange(exchange);
    }

    @Bean
    Binding binding(Queue queue, DirectExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with(routingkey);
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public AmqpTemplate rabbitTemplate() {
        final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory());
        rabbitTemplate.setMessageConverter(jsonMessageConverter());
        return rabbitTemplate;
    }
}


and for consumer:

@Configuration
public class ResultConsumerConfiguration extends RabbitMqConfiguration {

    @Value("${spring.rabbitmq.resultQueue}")
    String resultQueueName;

    @Value("${spring.rabbitmq.resultExchange}")
    String exchange;

    @Value("${spring.rabbitmq.resultRoutingkey}")
    String routingkey;

    @Bean
    Queue queue() {
        return new Queue(resultQueueName, true);
    }

    @Bean
    DirectExchange exchange() {
        return new DirectExchange(exchange);
    }

    @Bean
    Binding binding(Queue queue, DirectExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with(routingkey);
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        final Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter();
        converter.setClassMapper(classMapper());
        return converter;
    }
    
    @Bean
    public DefaultClassMapper classMapper() {
        DefaultClassMapper typeMapper = new DefaultClassMapper();
        typeMapper.setDefaultType(ResultMessageGeneral.class);

        return typeMapper;
    }
    
    @Bean
    public RabbitTemplate rabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory());
        template.setRoutingKey(this.resultQueueName);
        template.setMessageConverter(jsonMessageConverter());
        return template;
    }
    
    @Bean
    public SimpleMessageListenerContainer listenerContainer() {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory());
        container.setQueueNames(this.resultQueueName);
        container.setMessageListener(listenerAdapter());

        return container;
    }
    
    
     @Bean
        MessageListenerAdapter listenerAdapter() {
            return new MessageListenerAdapter(rabbitMqListener, jsonMessageConverter());
        }
 
}



martin moris

unread,
Sep 10, 2020, 6:11:12 AM9/10/20
to rabbitmq-users
I use ubuntu20.4 in my labtop and in server. and my rabbitmq version in server is  3.8.8 and version of Erlang is  23.0.3
Reply all
Reply to author
Forward
0 new messages