2017-11-14 28 views
0

:오류 응용 프로그램 시작에 가상 호스트에서 어떤 큐 I이 구성 클래스로 구성 RabbitMQ가있는 봄 부팅 응용 프로그램을 시작하려고 해요

@Configuration 
public class RabbitConfig implements RabbitListenerConfigurer { 

    public static final String AMQP_EXCHANGE_NAME = "test-queue"; 

    @Bean 
    public Exchange accessExchange() { 
     return new DirectExchange(AMQP_EXCHANGE_NAME); 
    } 

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

    @Bean 
    public Jackson2JsonMessageConverter producerJackson2MessageConverter() { 
     return new Jackson2JsonMessageConverter(); 
    } 

    @Bean 
    public MappingJackson2MessageConverter consumerJackson2MessageConverter() { 
     return new MappingJackson2MessageConverter(); 
    } 

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

    @Bean 
    public DefaultMessageHandlerMethodFactory messageHandlerMethodFactory() { 
     DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); 
     factory.setMessageConverter(consumerJackson2MessageConverter()); 
     return factory; 
    } 

    @Override 
    public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) { 
     registrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory()); 
    } 

하지만 오류 no queue 'test-queue' in vhost '/' 받고 있어요 :

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'test-queue' in vhost '/', class-id=50, method-id=10) 
    at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:509) ~[amqp-client-4.2.0.jar:4.2.0] 
    at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:340) ~[amqp-client-4.2.0.jar:4.2.0] 
    at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:162) ~[amqp-client-4.2.0.jar:4.2.0] 
    at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:109) ~[amqp-client-4.2.0.jar:4.2.0] 
    at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:643) ~[amqp-client-4.2.0.jar:4.2.0] 
    at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47) ~[amqp-client-4.2.0.jar:4.2.0] 
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:581) ~[amqp-client-4.2.0.jar:4.2.0] 
    ... 1 common frames omitted 

이 문제는 나는 다음 청취자가 정의한 경우에 발생합니다

@Transactional 
    @RabbitListener(queues = RabbitConfig.AMQP_EXCHANGE_NAME) 
    public void doSomething(TestDTO dto) { 
     ... 
    } 

그것은 대기열에서 소비하려고하지만 대기열이 아닌 것으로 보입니다. RabbitMQ 관리 인터페이스를 통해 큐를 생성하면 오류가 발생하지 않습니다.

이 큐를 자동으로 만드는 방법이 있습니까?이 오류가 발생하지 않습니까?

답변

0

Queue 콩을 표시하지 않습니다. 또한 구성에 RabbitAdmin이없는 것 같습니다 (대기열, 교환, 바인딩의 자동 선언에 필요함).

Configuring the Broker을 참조하십시오.