2016-03-23 15 views
-1

Ich versuche RabbitMQ zu lernen, mit SpringBoot i erstellen haben zwei Klassen: Receiver.java (es ist ein POJO):RabbitMQ Frühling Boot org.springframework.beans.factory.NoSuchBeanDefinitionException

Diese Klasse wird die Nachricht empfangen.

public class Receiver { 

    private CountDownLatch latch = new CountDownLatch(1); 

    public void receiveMessage(String message) { 
     System.out.println("Received <" + message + ">"); 
     latch.countDown(); 
    } 

    public CountDownLatch getLatch() { 
     return latch; 
    } 
} 

Und meine seconde Klasse RabbitMq2Application.java (es ist die springBootApplication): für meine Nachricht erhalten.

@SpringBootApplication 
public class RabbitMq2Application implements CommandLineRunner{ 


    final static String queueName = "spring-boot"; 

    @Autowired 
    AnnotationConfigApplicationContext context; 

    @Autowired 
    RabbitTemplate rabbitTemplate; 

    @Bean 
    Queue queue() { 
     return new Queue(queueName, false); 
    } 

    @Bean 
    TopicExchange exchange() { 
     return new TopicExchange("spring-boot-exchange"); 
    } 

    @Bean 
    Binding binding(Queue queue, TopicExchange exchange) { 
     return BindingBuilder.bind(queue).to(exchange).with(queueName); 
    } 

    @Bean 
    SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { 
     SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
     container.setConnectionFactory(connectionFactory); 
     container.setQueueNames(queueName); 
     container.setMessageListener(listenerAdapter); 
     return container; 
    } 

    @Bean 
    Receiver receiver() { 
     return new Receiver(); 
    } 

    @Bean 
    MessageListenerAdapter listenerAdapter(Receiver receiver) { 
     return new MessageListenerAdapter(receiver, "receiveMessage"); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(RabbitMq2Application.class, args); 
    } 

    @Override 
    public void run(String... args) throws Exception { 
     System.out.println("Waiting five seconds..."); 
     Thread.sleep(5000); 
     System.out.println("Sending message..."); 
     rabbitTemplate.convertAndSend(queueName, "Hello from RabbitMQ!"); 
     receiver().getLatch().await(10000, TimeUnit.MILLISECONDS); 
     context.close(); 
    } 
} 

Und ich bekomme diese Fehlermeldung: org.springframework.beans.factory.NoSuchBeanDefinitionException

Ich vermute, es ist, weil die ConnectionFactory- weil er @autowired ist.

Antwort

0

Bitte teilen Sie mehr StackTrace. In der Regel gibt es viele Informationen rund um diese NoSuchBeanDefinitionException.

Von anderer Hand bitte, wenn Sie die richtige ConnectionFactory Klasse importieren. Das ist, weil es wirklich alle benötigten Bohnen sind für Sie (RabbitAutoConfiguration):

@Autowired 
private ConnectionFactory connectionFactory; 

@Bean 
@ConditionalOnMissingBean(RabbitTemplate.class) 
public RabbitTemplate rabbitTemplate() { 
    return new RabbitTemplate(this.connectionFactory); 
} 

Der erforderliche Typ ist: org.springframework.amqp.rabbit.connection.ConnectionFactory.

Verwandte Themen