Ich habe eine neue Federanwendung erstellt, die Nachrichten an einen rabbitmq-Server sendet. Meine rabbitMQConfig Java-Datei wie folgt aussieht:RabbitMQ Exchange und Queue werden nicht automatisch erstellt
@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");
}
}
Hier ist, wie ich Nachricht an die Warteschlange drücken:
@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;
}
}
Da der Austausch und die Warteschlange nicht vorhanden sind auf dem rabbitmq Server, ich sie erwarten automatisch erstellt werden und eine Nachricht gesendet werden soll. Aber es ergibt sich folgende Fehler:
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)
Wenn ich schaffen den Austausch und die Warteschlange und binden sie manuell auf dem Server eine Nachricht erfolgreich gedrückt wird. Bitte lassen Sie mich wissen, wenn ich etwas vermisse. Vielen Dank.