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());
}
}