我正在为我的rabbitmq应用程序设置连接工厂。我在配置中创建了bean,但是由于某种原因,我传递到RabbitTemplate中的ConnectionFactory似乎没有自动创建bean。
错误的说法是Could not autowire. No beans of 'ConnectionFactory' type found.
,但是这个bean应该自动创建。如果我手动创建了一个连接工厂的bean,它就会工作,但我很难理解为什么没有它它就不能工作。
package com.example.redistorabbit;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class RedisToRabbitApplication {
public static void main(String[] args) {
SpringApplication.run(RedisToRabbitApplication.class, args);
}
public static final String TOPIC_EXCHANGE_NAME = "covid-exchange";
public static final String QUEUE_NAME = "cases-entity";
@Bean
Queue queue(){
return new Queue(QUEUE_NAME,false);
}
@Bean
TopicExchange exchange(){
return new TopicExchange(TOPIC_EXCHANGE_NAME);
}
@Bean
Binding binding(Queue queue, TopicExchange topicExchange){
return BindingBuilder.bind(queue).to(topicExchange).with("#");
}
@Bean
public RabbitTemplate publishingRabbitTemplate(final ConnectionFactory connectionFactory) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(jsonConverter());
rabbitTemplate.setChannelTransacted(true);
return rabbitTemplate;
}
@Bean
public Jackson2JsonMessageConverter jsonConverter() {
return new Jackson2JsonMessageConverter();
}
}
另一个问题是,即使我有Jackson2JsonMessageConverter,当lisetener接收并打印它显示为字节而不是json消息的消息时:
@Component
@RequiredArgsConstructor
public class Receiver {
private final CasesRepository casesRepository;
private static final Logger log = LoggerFactory.getLogger(Receiver.class);
@RabbitListener(queues = RedisToRabbitApplication.QUEUE_NAME)
public void consumeMessage(final Message message) {
log.info("received: " + message.toString());
}
}
收到:(正文:'[B@1b68f46c(字节[91])
2条答案
按热度按时间f4t66c6m1#
您是否尝试将Spring对象Map器注入Jackson消息转换器?
ni65a41a2#
似乎问题在于spring boot自动配置依赖的版本,我可以在JacksonAutoConfiguration类的2.7.3版本中看到bean,但Intellij仍然表示没有找到bean。我添加了以下依赖项:
ConnectionFactory和ObjectMapper bean都是自动创建的