#spring-rabbit
#spring-rabbit
Вопрос:
Это мой класс конфигурации.
@Configuration
public class MessageConfig {
public static final String KEY = "anil_key";
public static final String EXCHANGE = "anil_exchange_one";
public static final String QUEUE = "anil_queue";
@Bean
public Queue queue() {
return new Queue(QUEUE, false);
}
@Bean
public DirectExchange exchange() {
return new DirectExchange(EXCHANGE);
}
@Bean
public Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(KEY);
}
@Bean
public MessageConverter converter() {
return new Jackson2JsonMessageConverter();
}
@Bean
public AmqpTemplate template(ConnectionFactory connectionFactory) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(converter());
return rabbitTemplate;
}
и это мой класс publisher
@RestController
@RequestMapping("/order")
public class Publisher {
@Autowired
private AmqpTemplate rabbitTemplate;
@PostMapping("/{restaurentName}")
public String bookOrder(@RequestBody Order order,@PathVariable String restaurentName) {
order.setOrderId(UUID.randomUUID().toString());
OrderStatus status = new OrderStatus(order,"progress","successfully received");
rabbitTemplate.convertAndSend(MessageConfig.EXCHANGE, MessageConfig.KEY, status);
return "success";
}
Я получаю сообщение об ошибке ниже.
2020-10-04 14:28:24.628 ОШИБКА 17008 — [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory : отключение канала: ошибка канала; метод протокола: #метод<channel.close>(reply-code=404, reply-text=NOT_FOUND — нет обмена ‘anil_exchange_one’ в vhost ‘/’, class-id= 60, method-id= 40).
Ответ №1:
Вам нужно RabbitAdmin
@Bean
объявить exhange / queue / привязку.
@Bean
RabbitAdmin admmin(ConnectionFactory cf) {
return new Rabbitadmin(cf);
}
Комментарии:
1. Как добавить RabbitAdmin?
2. После добавления RabbitAdmin также возникла та же проблема.
3. Включите ведение журнала ОТЛАДКИ, чтобы увидеть действия администратора при открытии соединения.
4. Завершение работы канала: ошибка канала; метод протокола: #метод<channel.close>(reply-code=404, reply-text=NOT_FOUND — нет обмена ‘anil_exchange_one’ в vhost ‘/’, class-id=60, method-id=40)
5. Тогда что-то не так; опубликуйте свой полный проект где-нибудь, чтобы я мог увидеть, что не так.