2017-12-11 22 views
0

rabbitmq 서버에 메시지를 푸시하는 새 스프링 애플리케이션을 만들었습니다. 내 rabbitMQConfig 자바 파일은 다음과 같다 :RabbitMQ Exchange 및 대기열이 자동으로 생성되지 않음

여기
@Configuration 
public class RabbitMQConfig { 

    private static final Logger LOGGER = LoggerFactory.getLogger(RabbitMQConfig.class); 

    @Value("${spring.rabbitmq.host}") 
    private String SPRING_RABBITMQ_HOST; 

    @Value("${spring.rabbitmq.port}") 
    private int SPRING_RABBITMQ_PORT; 

    @Value("${spring.rabbitmq.username}") 
    private String SPRING_RABBITMQ_USERNAME; 

    @Value("${spring.rabbitmq.password}") 
    private String SPRING_RABBITMQ_PASSWORD; 

    @Bean 
    public RabbitTemplate rabbitTemplate(){ 
     CachingConnectionFactory connectionFactory = new CachingConnectionFactory(SPRING_RABBITMQ_HOST,SPRING_RABBITMQ_PORT); 
     connectionFactory.setUsername(SPRING_RABBITMQ_USERNAME); 
     connectionFactory.setPassword(SPRING_RABBITMQ_PASSWORD); 
     RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); 
     rabbitTemplate.setExchange("my.controller.exchange"); 
     rabbitTemplate.setRoutingKey("my.controller.key"); 
     return rabbitTemplate; 
    } 

    @Bean 
    DirectExchange exchange() { 
      return new DirectExchange("my.controller.exchange", true, false); 
    } 

    @Bean 
    public Queue queue() { 
      return new Queue("my.controller", true); 
    } 

    @Bean 
    Binding exchangeBinding(DirectExchange exchange, Queue queue) { 
      return BindingBuilder.bind(queue).to(exchange).with("my.controller.key"); 
    } 
} 

은 내가 큐에 메시지를 밀어 방법 : 교환 및 큐가 rabbitmq 서버에 존재하지 않기 때문에

@Service 
public class RabbitPublisher { 

    @Autowired 
    private RabbitTemplate rabbitTemplate; 

    private static Logger LOGGER = Logger.getLogger(RabbitPublisher.class); 

    public Boolean pushToMyQueue(HashMap<String, Object> message) { 
     try { 
      rabbitTemplate.convertAndSend("my.controller.exchange","my.controller.key",message); 
      return true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      LOGGER.error("Error in pushing to my queue", e); 
     } 
     return false; 
    } 
} 

, 내가 그들을 기대 자동으로 생성되고 푸시 될 메시지 그러나 다음과 같은 오류가 발생합니다.

ERROR 18198 --- [168.201.18:5672] o.s.a.r.c.CachingConnectionFactory  : 
Channel shutdown: channel error; protocol method: #method<channel.close> 
(reply-code=404, reply-text=NOT_FOUND - no exchange 
'my.controller.exchange' in vhost '/', class-id=60, method-id=40) 

교환기를 만들고 큐에 수동으로 바인딩하면 메시지가 성공적으로 푸시됩니다. 내가 누락 된 부분이 있으면 알려주십시오. 감사.

답변

2

RabbitAdmin @Bean을 추가해야합니다. 관리자는 연결이 처음 열릴 때 요소를 선언합니다.