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