2016-11-29 2 views
1

1つのアプリケーションからメッセージを投稿し、別のアプリケーションで受信するためにRabbitMQを使用しようとしています。これらのアプリケーションはCloud Foundryでホストされており、両方ともRabbitMQの同じインスタンスにバインドされています。ConnectionがSpringを使用してCloud FoundryでRabbitMQ Queueからの読み取りを拒否しました

最初のアプリケーションからキューにメッセージを送信できますが、@RabbitListenerと@RabbitHandlerを使用してこのキューをリッスンする2番目のアプリケーションでは、Connection Refusedエラーが発生しています。それはうまくRabbitMQの私のローカルインスタンスで動作します。

Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: errno: 111 (Connection refused), error: Connection refused (local port 45596 to address 127.0.0.1 (localhost), remote port 5672 to address 127.0.0.1 (localhost))

これは完全なログです。

リモートポートは5672で同じですが、ローカルポートはログからログに変わりません。私はSpringが私のためにこれを処理しているはずだと思っているので、また、私の最初のアプリケーションでもうまく動作しているように思われるので、これらのポートがどこから拾われているのか分かりません。ここで

は私の設定looks-

@Bean 
     public MessageConverter jsonMessageConverter(){ 
      return new Jackson2JsonMessageConverter(); 
     } 

     @Bean 
     public AmqpAdmin amqpAdmin(ConnectionFactory connectionFactory) { 
      return new RabbitAdmin(connectionFactory); 
     } 

     @Bean 
     public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { 
      RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); 
      rabbitTemplate.setMessageConverter(jsonMessageConverter()); 
      return rabbitTemplate; 
     } 

     @Bean 
     public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory rabbitConnectionFactory) { 
      SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
      container.setConnectionFactory(rabbitConnectionFactory); 
      container.setQueueNames("queue2911"); 
      container.setAutoStartup(false); 
      //container.setMessageListener(exampleListener()); 
      return container; 
     } 

は、任意の助けをいただければ幸い方法です。

答えて

0

オペレーティングシステムがローカルポートを選択します。

localhostに接続しようとしているということは、ブート構成済みの接続ファクトリーではなく、デフォルト(localhost:5672)の接続ファクトリーを使用していることを意味します。

両方のアプリケーションのDEBUGロギングをオンにし、自動設定レポートを比較します。

+0

接続ファクトリー用のBeanを自分で作成していたとき、最初のアプリでこれと同様の問題が発生しました。これを解決するために、代わりにウサギのテンプレートコンストラクタにパラメータとして接続ファクトリを渡すように切り替えました。私はここで同様のアプローチをしましたが、ここでは、私の最初のアプリと違って、これらのconfigsが@ rabbitlistenerにどのようにマップされているのか理解できません、autowiringはありません。これらの豆が実際に@ rabbitlistenerと@ rabbithandlerアノテーションにマップされている様子を教えてください。ありがとう! –

+0

スプリングブート自動設定では、接続ファクトリBeanとウサギリスナーコンテナファクトリBeanが作成されます。これは、各@RabbitListenerアノテーションのリスナーコンテナを作成するために使用されます。[here](https://github.com/spring-projects /spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAnnotationDrivenConfiguration.java#L62)。 –

+0

Aah。そうですか。したがって、本質的に@RabbitListenerは、有効なウサギとは別の追加の設定を必要とすべきではありませんか? –

関連する問題