2017-03-08 15 views
1

Ich habe zwei Spring Boot-Anwendungen auf einem Server ausgeführt. Beide verwenden Embedded ActiveMQ JMS. Ich möchte separate JMS-Instanz für jede Anwendung haben. Wie kann ich den Port für jeden von ihnen einstellen? Gibt es eine Eigenschaft wie spring.activemq.port? Wenn ich zweite Anwendung laufen bekomme ich folgende Fehlererwartungs:Wie setze ich den ActiveMQ-Port im Spring Boot?

Failed to start JMX connector Cannot bind to URL [rmi://localhost:1099/jmxrmi]: javax.naming.NameAlreadyBoundException: jmxrmi [Root exception is java.rmi.AlreadyBoundException: jmxrmi]. Will restart management to re-create JMX connector, trying to remedy this issue. 

Antwort

0

Sie können die Broker-URL konfigurieren, dass die spring.activemq.broker-url Eigenschaft, z.B. setze es auf spring.activemq.broker-url=tcp://localhost:61616.

Für eine umfassende Referenz der verfügbaren Eigenschaften können Sie diese reference überprüfen.

+1

Wenn ich dies tue, bekomme ich: Konnte keine Verbindung zum Broker herstellen URL: tcp: // localhost: 61616. Grund: java.net.ConnectException: Verbindung abgelehnt: connect – Igorock

+0

Ich denke, diese Eigenschaft wird zum Setzen von Remote-JMS verwendet, nicht zum Ändern der URL von Embedded – Igorock

+0

Können Sie die Einstellungen, die Sie für jede Anwendung verwenden? Es gibt mehrere Ports, die möglicherweise in Konflikt stehen. – gtonic

0

Ich habe gleiches Problem, zwei SpringBoot Prozess und ich mag Nachrichten durch die ActiveMQ senden. Zuerst ich habe es funktioniert weiteren Prozess mit dem ActiveMQ beginnen und die Konfiguration sowohl SpringBoot Prozesses in ihre application.properties Dateien mit:

spring.activemq.broker-url = tcp://localhost:61616 

Whit diese Konfiguration Sie Springboot sagen zu einem externen ActiveMQ Service zu verbinden. Das funktioniert, aber dann muss ich zuerst start the ActiveMQ und nach meinem Springboot-Prozess. In einigen Seiten, die ich gelesen habe, muss das die Art sein, in Produktionsumgebungen zu arbeiten.

Eine andere Lösung besteht darin, die eingebettete JMS-Unterstützung bei einem SpringBoot-Prozess zu verwenden. Auf diese Weise müssen Sie den ActiveMQ-Brokerdienst für Verbindungen in einem Springboot-Prozess konfigurieren. Sie können diese das Hinzufügen eines Broker-Bean tun:

@Bean 
public BrokerService broker() throws Exception { 
    final BrokerService broker = new BrokerService(); 
    broker.addConnector("tcp://localhost:61616"); 
    broker.addConnector("vm://localhost"); 
    broker.setPersistent(false); 
    return broker; 
} 

Nun ist dieser SpringBoot Prozess mit dieser Bohne braucht nicht die vorherige Konfiguration an den application.properties, und dies wird der erste Prozess zu starten, um zu Lassen Sie ActiveMQ auf andere Prozessverbindungen warten.

Der andere Springboot-Prozess muss noch die Konfiguration unter der application.properties haben, um eine Verbindung zu dem ActiveMq herzustellen, der von dem ersten Prozess erstellt wird.

Ich hoffe, es hilft Ihnen. Mit freundlichen Grüßen.

Verwandte Themen