2016-08-03 30 views
3

私はSpringブート(バージョン1.4.X)で埋め込みActiveMQを設定して実行する簡単な例に従っています。ここでは例へのリンクはhttps://spring.io/guides/gs/messaging-jms/埋め込みActiveMQブローカURLをスプリングブートで設定する方法

だ私のクラスには、以下のように構成されています

@SpringBootApplication 
@EnableJms 
public class Application { 

@Autowired 
ConfigurableApplicationContext context; 

@Bean 
JmsListenerContainerFactory<?> myJmsContainerFactory(ConnectionFactory connectionFactory) { 
    SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); 
    factory.setConnectionFactory(connectionFactory); 

    return factory; 
} 

@JmsListener(destination = "mailbox-destination", containerFactory = "myJmsContainerFactory") 
public void receiveMessage(String message) { 
    System.out.println("Message received: " + message); 
    context.close(); 
} 

public static void main(String[] args) throws Exception { 
    FileSystemUtils.deleteRecursively(new File("active-data")); 
    ConfigurableApplicationContext context = SpringApplication.run(Application.class, args); 

    JmsTemplate template = context.getBean(JmsTemplate.class); 
    MessageCreator messageCreator = new MessageCreator() { 
     public Message createMessage(Session session) throws JMSException { 
      return session.createTextMessage("Test"); 
     } 
    }; 
    template.send("mailbox-destination", messageCreator); 
} 
} 

、以下のようにbuild.gradle:

apply plugin: 'java' 
apply plugin: 'maven' 

group = 'jms.activemq' 
version = '0.0.1-SNAPSHOT' 

description = """jms.activemq""" 

sourceCompatibility = 1.5 
targetCompatibility = 1.5 

repositories { 
    maven { url "http://repo.maven.apache.org/maven2" } 
} 
dependencies { 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-activemq', version:'1.4.0.RELEASE' 
    testCompile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version:'1.4.0.RELEASE') { 
exclude(module: 'commons-logging') 
} 
} 

すべてがこれまでに(限り私が去るとしてうまく機能しますapplication.properties empty)、次のapplication.propertiesファイルを追加することでブローカーURLを設定しようとすると(リモートクライアントが接続できるように):

spring.activemq.broker-url=tcp://localhost:61616 
spring.activemq.user=admin 
spring.activemq.password=admin 
0123私はまだ、問題の原因を特定することはできませんいくつかのリンクを見ている

2016-08-03 12:46:00.938 WARN 88180 --- [   main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.jms.config.internalJmsListenerEndpointRegistry'; nested exception is org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect 
2016-08-03 12:46:00.939 INFO 88180 --- [   main] o.s.j.e.a.AnnotationMBeanExporter  : Unregistering JMX-exposed beans on shutdown 
2016-08-03 12:46:00.945 INFO 88180 --- [   main] utoConfigurationReportLoggingInitializer : 
org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.jms.config.internalJmsListenerEndpointRegistry'; nested exception is org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect 
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:874) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
at jms.activemq.Application.main(Application.java:37) [main/:na] 
Caused by: org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect 
at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:169) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:273) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.config.JmsListenerEndpointRegistry.startIfNecessary(JmsListenerEndpointRegistry.java:243) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.config.JmsListenerEndpointRegistry.start(JmsListenerEndpointRegistry.java:206) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
... 12 common frames omitted 
Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect 
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:373) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:303) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:243) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:180) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.listener.AbstractJmsListeningContainer.createSharedConnection(AbstractJmsListeningContainer.java:413) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.listener.AbstractJmsListeningContainer.establishSharedConnection(AbstractJmsListeningContainer.java:381) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.listener.AbstractJmsListeningContainer.doStart(AbstractJmsListeningContainer.java:285) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.listener.SimpleMessageListenerContainer.doStart(SimpleMessageListenerContainer.java:210) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:270) ~[spring-jms-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
... 15 common frames omitted 
Caused by: java.net.ConnectException: Connection refused: connect 
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_92] 
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_92] 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_92] 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_92] 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_92] 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_92] 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_92] 
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_92] 
at org.apache.activemq.transport.tcp.TcpTransport.connect(TcpTransport.java:525) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.transport.tcp.TcpTransport.doStart(TcpTransport.java:488) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.transport.AbstractInactivityMonitor.start(AbstractInactivityMonitor.java:168) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.transport.InactivityMonitor.start(InactivityMonitor.java:52) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.transport.WireFormatNegotiator.start(WireFormatNegotiator.java:72) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58) ~[activemq-client-5.13.4.jar:5.13.4] 
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:353) ~[activemq-client-5.13.4.jar:5.13.4] 
... 23 common frames omitted 

は、私は例外を取得します。本当に、いくつかの洞察、または助けることができる材料を感謝します。

私は初期の考えでは、これらの値を読み込んでActiveMQブローカを設定する代わりに、これらの値を使用してブローカ(ブローカはすでに別の設定で構成されている)に接続するように見えます。どのように私は、外部クライアントが(ブローカーと同じJVMでから実行していない)ブローカ構成を変更することができ、TCPを使用して、ブローカにアクセスすることができます:// localhostを:61616

UPDATE:

私は1つに従っていますhereと記載されているブローカーを埋め込む方法について説明し、必要なURLを持つブローカーを組み込み、ブローカーに接続できるようにします。しかし、Spring Bootがまだ前に進んでいて以前と同じように1つ作成するようになって以来、私は2人のブローカーを持つことになります。

基本的に、SpringApplication.run(Application.class、args)を呼び出す前に、このコードを追加するだけです。

BrokerService broker = new BrokerService(); 
broker.addConnector("tcp://localhost:61617"); 
broker.setPersistent(false); 
broker.start(); 

2つのブローカインスタンス(私は信じている)を実行していると全く気になりません。もしそうなら

1)は、これが)ブローカー

2を埋め込むための適切な方法ですが、私は別のものを開始から春ブーツをどのように停止することができますか? (spring-boot-starter-activemqの依存関係を削除する必要なし)。

ありがとうございます。

+1

ActiveMQブローカーが実行されていないか、設定したポートとは別のポートで待機しているように見えます。あなたの投稿を編集し、 'netstat -nat | grep LISTEN'の出力を追加してください(Windowsの' netstat -nat | findstr LISTEN') –

+0

はい、私はチェックしましたが、そのようなポートはありません。以前はポートを監視してください)。私は私の質問がもっと似ていると思う、私は春のブートを取得する方法は、このポートをリッスンするようにブローカーを設定するには?私はapplication.propertiesの情報を「このブローカーを設定したいURL /ポートです」と告げるが、代わりに「ここにブローカーを見つける場所がある」と言うように思える。私はもう少し明確になるように質問を編集しました。 –

+0

[here](https://stackoverflow.com/a/44600306/2979435)完全なサンプル – deFreitas

答えて

7

私はいつかこれを周りに遊んだ後にこれを理解したと信じています。

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); 

をしかし、どうやら春ブーツはdoesnの1フィギュア:私はDEFAULT埋め込まブローカーへの接続を作成しようとしていたので、2つのインスタンスは、(それが作成されたかどうかを把握しようとする試みに/存在していた)以下のように実行していると思っていましたその時にそれが存在しています。

だから私だけ作成したインスタンスが稼働しているために、私が行うために必要なすべては以下のようにapplication.propertiesファイルに(この場合はtcp://localhost:61616に)私は、インスタンスを作成したとき、私は、コネクタに追加URLを提供した

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

とSpring Bootがこのインスタンスに接続し、別のインスタンスを作成しません。プロパティファイルに上記のエントリがない場合(または上記のようにvm:// localhost?...を使用して埋め込みインスタンスに接続しようとすると)、Spring Bootが先に進んでインスタンス化します。

私もdocumentationでこれを読みました:それはActiveMQのは、クラスパスで提供されています を検出したとき

春ブーツものConnectionFactoryを構成することができます。ブローカが存在する場合、 (ブローカURLがコンフィグレーションによって指定されていない限り、 が指定されている限り)、埋め込みブローカが自動的に起動および設定されます。

私の意見では、それはよく綴られていませんが、正しい方向に考えています。

違う発見があった場合、または私の結論が正しくない場合は、お知らせください。ありがとう!!!

+0

他のスプリングブートアプリケーションが確立したブローカに接続するために必要な設定を追加できますか?私はそれを正常に作成し、それを作成したアプリケーションから送信するメッセージを取得しています。 – MaxG

+2

@MaxG新しい 'application- {profile} .yml'設定ファイルを作成し、' spring.activemq.broker-url:vm:// localhost?broker.persistent = false'の中に入れます。 – kpentchev

関連する問題