2016-07-01 12 views
0

Warum RabbitMQ beim Erstellen des Spring-Boot-Jars ausgelöst wird oder ausgeführt wird. Während der Ausführung von Application.java oder pom.xml.Spring-Boot deaktiviert Start beim Start RabbitMQ

ich bin der Lage, die folgenden Loggern

2016-07-01 16:40:04.334 INFO 7004 --- [   main] com.rabbit.App        : No active profile set, falling back to default profiles: default 
2016-07-01 16:40:04.391 INFO 7004 --- [   main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationC[email protected]: startup date [Fri Jul 01 16:40:04 CEST 2016]; root of context hierarchy 
2016-07-01 16:40:05.331 INFO 7004 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'rabbitListenerContainerFactory' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=rabbitMqConfiguration; factoryMethodName=rabbitListenerContainerFactory; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/rabbit/messaging/configuration/RabbitMqConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=taskConsumerConfiguration; factoryMethodName=rabbitListenerContainerFactory; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/rabbit/messaging/configuration/TaskConsumerConfiguration.class]] 
2016-07-01 16:40:05.334 INFO 7004 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'connectionFactory' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=rabbitMqConfiguration; factoryMethodName=connectionFactory; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/rabbit/messaging/configuration/RabbitMqConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=taskConsumerConfiguration; factoryMethodName=connectionFactory; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/rabbit/messaging/configuration/TaskConsumerConfiguration.class]] 
2016-07-01 16:40:05.334 INFO 7004 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'jsonMessageConverter' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=rabbitMqConfiguration; factoryMethodName=jsonMessageConverter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/rabbit/messaging/configuration/RabbitMqConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=taskConsumerConfiguration; factoryMethodName=jsonMessageConverter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/rabbit/messaging/configuration/TaskConsumerConfiguration.class]] 
2016-07-01 16:40:05.868 INFO 7004 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.amqp.rabbit.annotation.RabbitBootstrapConfiguration' of type [class org.springframework.amqp.rabbit.annotation.RabbitBootstrapConfiguration$$EnhancerBySpringCGLIB$$ad9295b0] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2016-07-01 16:40:06.657 INFO 7004 --- [   main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 

Gibt es eine Möglichkeit, dies zu deaktivieren, um zu sehen?

Beim Erstellen des Glases während der Testphase wird folgende Ausnahme ausgelöst.

LifecycleProcessor with name 'lifecycleProcessor': using default [[email protected]dc36e5] 
2016-06-30 15:10:32.989 WARN 21614 --- [cTaskExecutor-1] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it 

org.springframework.amqp.AmqpIOException: java.net.SocketTimeoutException: connect timed out 
at  org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:67) 
at 
+0

Dies ist nur Bean Deklaration Zeug - genau welches Problem haben Sie? –

+0

RabbitMQ Host-Eigenschaften werden in der application.properties definiert, während wir die Anwendung erstellen, die wir dynamisch über das Build-Skript übergeben werden. Während des Aufbaus des Glases während der Testphase wirft es die folgende Ausnahme auf. org.springframework.amqp.AmqpIOException: java.net.SocketTimeoutException: connect Zeitüberschreitung – VelNaga

+0

@Gary Russell beim Aufbau des Glases Spring-Boot versuchte, die RabbitMQ-Verbindung herzustellen.Ist es sowieso, es über lazy loading zu tun? Ich meine auf Ich habe versucht, mit der folgenden Annotation @EnableAutoConfiguration (exclude = RabbitAutoConfiguration.class), aber keine luck.atleast wir sollten SimpleMessageListenerContainer Lazy laden.Alle Möglichkeiten des Lazy loading RabbitMQ Verbindung oder SimpleMessageListenerContainer? – VelNaga

Antwort

0

Sie erhalten den Protokolleintrag 'Überschreibende Beandefinition ..', wenn Sie eine Bean mit diesem Namen mehr als einmal definieren.

Dies führt zu der Frage, welche der mindestens zwei Bohnen du verwendest und wie sie konfiguriert sind?

Legen Sie Haltepunkte für die Konstruktoren der Bean "rabbitListenerContainerFactory" fest und sehen Sie, welche Instanzen Sie erstellen.

Wenn Sie nachschlagen, können Sie über die Stack-Trace Informationen darüber erhalten, warum diese Bean erstellt wurde, damit Sie das Duplikat aus Ihrer Spring-Konfiguration entfernen können.

Sie können auch Haltepunkte hinzufügen, in denen die Kaninchenverbindungseigenschaften festgelegt sind.

"connect timed out" erscheint auch, wenn die angegebene IP falsch ist.

Wie auch immer, ich würde nicht empfehlen, die Eigenschaften im Build-Skript festzulegen, zeigen Sie stattdessen auf die Eigenschaftendateien in der Befehlszeile, wenn Sie die Anwendung starten. Dadurch können Sie Ihren Build in verschiedenen Umgebungen verwenden.

Siehe howto-properties-and-configuration

Warum es wirft, während das Glas bauen? Sie haben geschrieben, dass Sie die Eigenschaften während des Builds mit einem Skript festlegen.

Das bedeutet, dass die Tests diese Eigenschaften verwenden und jetzt die Tests fehlschlagen, möglicherweise weil der Hasen-mq-Server mit den bereitgestellten Eigenschaften nicht erreichbar ist oder nicht.

Solange Sie Bohnen überschreiben, wissen Sie nicht wirklich, welche Instanz Sie verwenden, so dass Sie nicht wirklich wissen, welche Eigenschaften Sie verwenden. Probieren Sie es aus, um sich einzuloggen, als ich bin sicher, Sie werden sehen ....

+0

danke für Ihre Antwort. Ich möchte nicht, dass einige Beans automatisch von spring-rabbit.ex bereitgestellt werden. ConnectionFactory, LibstnerContainerFactory.So habe ich diese Beans manuell basierend auf meinen Anforderungen konfiguriert.So ist die Info-Nachricht eine gültige, aber warum wirft sie beim Bau des Jars? – VelNaga

0

Sie können nicht „lazy load“ Bohnen, die SmartLifecycle (wie der Hörer Container) implementieren, da der Kontext die Bohne laden muss Rufen Sie isAutoStartup() auf, um zu sehen, ob die Bean gestartet werden soll oder nicht.

Wenn der Kontext beim Erstellen des JAR geladen wird, müssen Testfälle vorhanden sein, die die Beans verwenden. Sie können autoStartup auf false setzen - aber Ihre Tests werden wahrscheinlich dann fehlschlagen.

Sie können die Tests mit -DskipTests=true (Maven) oder -x test (Gradle) überspringen.

0

Ich habe das gleiche Problem in meinen Tests. Ich benutze keinen Hasen und da die Timeouts auftreten erhöht sich die Testdauer.

Als einfache Lösung können Sie die Konfiguration von Warteschlangen, Austausch usw. während Tests mit Federprofilen deaktivieren.

Beispiel:

mit der Konfiguration, dass, wenn das Federprofil „no_rabbit“ deaktiviert vorhanden ist.

@Configuration 
@Profile("!no_rabbit") 
public class RabbitMQConfig { 

    @Bean 
    public Queue queue() { 
     return QueueBuilder.durable("NAMW").withArgument("x-message-ttl", 3600).build(); 
    } 

    // more definitions of bean, exchanges etc. 

} 

Dann fügen Sie im Test einfach das Profil "no_rabbit" hinzu.

Die Nachteile dieses Ansatzes sind, dass Sie das Profil in jedem einzelnen Test hinzufügen müssen, der kein Kaninchen verwendet. Aber für meinen Fall ist es in Ordnung, bis ich eine bessere Lösung habe.