我正在使用CachingConnectionFactory并使其成为bean,以便在不存在队列和交换时自动创建它们。我创建了另一个bean RabbitTemplate,在其中我设置了一个交换。
@Bean
public RabbitTemplate receiptRabbitTemplate() throws URISyntaxException {
RabbitTemplate template = new RabbitTemplate(cachingConnectionFactory(rabbitMQServiceScheme,
rabbitMQServiceHostName, rabbitMQServiceContextRoot, rabbitMQServiceUser, rabbitMQServicePassword));
template.setMandatory(true);
template.setChannelTransacted(true);
Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JodaModule());
objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
converter.setJsonObjectMapper(objectMapper);
template.setMessageConverter(converter);
template.setRetryTemplate(retryTemplate());
template.setExchange("test.exchange"); //--------------------<
return template;
}
现在我正在添加另一个RabbitTemplate,以便我可以向另一个交换机发送消息。因为它在同一个虚拟机中,所以我使用的是相同的ConnectionFactory bean。
@Bean
public RabbitTemplate receiptRabbitTemplate() throws URISyntaxException {
RabbitTemplate template = new RabbitTemplate(cachingConnectionFactory(rabbitMQServiceScheme,
rabbitMQServiceHostName, rabbitMQServiceContextRoot, rabbitMQServiceUser, rabbitMQServicePassword));
template.setMandatory(true);
template.setChannelTransacted(true);
Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JodaModule());
objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
converter.setJsonObjectMapper(objectMapper);
template.setMessageConverter(converter);
template.setRetryTemplate(retryTemplate());
template.setExchange("anothertest.exchange");//---------------<
return template;
}
但是当我尝试发送消息时,只创建了一个交换。对于另一个我得到错误
Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange
关于我做错的任何指示?
答案 0 :(得分:0)
为了声明任何交换,你需要一个RabbitAdmin
bean,每个交换必须被定义为一个bean(不只是在模板中设置)。