2016-11-25 3 views
0

2台の休憩サービスは、最初にhttp(たとえばポート1234)と2番目のhttps(たとえばポート4321)で立ち往生します。どうすれば設定できますか?それは可能ですか?私は(例のURL)を受信する必要が2つのポートとプロトコルのキャメル桟橋の休憩方法

効果:私は2つのルートを追加しようとしているこの瞬間のために

http://localhost:1234/firstHttpMethod 
http://localhost:1234/secondHttpMethod 
https://localhost:4321/firstHttpsMethod 
https://localhost:4321/secondHttpsMethod 

、唯一の二取り組んでいます。その問題を解決するには(私は2つの休憩サービスをすると思います - 最初は桟橋で、もう1つは何か、しかし良い考え方ではありません)。

コードは次のようになります。

camelContext.addRoutes(firstJettyBuilder()); 
camelContext.addRoutes(secondJettyBuilder()); 

protected RouteBuilder firstJettyBuilder() 
{ 
    return new RouteBuilder() 
    { 
     @Override 
     public void configure() 
      throws Exception 
     { 

      restConfiguration() 
       .component("jetty") 
       .host("localhost") 
       .port(42300) 
       .scheme("https") 
       .bindingMode(RestBindingMode.json) 
       .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES") 
       .dataFormatProperty("json.in.enableFeatures", "FAIL_ON_NULL_FOR_PRIMITIVES"); 

      configureSSL(); 
     } 

     private void configureSSL() 
     { 
      final JettyHttpComponent jettyComponent = camelContext.getComponent("jetty", JettyHttpComponent.class); 

      final Map<String, Object> sslSocketConnectorProperties = new HashMap<>(); 

      sslSocketConnectorProperties.put("keyStorePath", KEYSTORE); 
      sslSocketConnectorProperties.put("trustStorePath", KEYSTORE); 

      sslSocketConnectorProperties.put("keyStorePassword", KEYSTORE_PASSWORD); 
      sslSocketConnectorProperties.put("trustStorePassword", KEYSTORE_PASSWORD); 

      jettyComponent.setSslSocketConnectorProperties(sslSocketConnectorProperties); 
     } 
    }; 
} 
protected RouteBuilder createPosJettyBuilder() 
{ 
    return new RouteBuilder() 
    { 
     @Override 
     public void configure() 
      throws Exception 
     { 

      restConfiguration() 
       .component("jetty") 
       .host("localhost") 
       .port(42302) 
       .scheme("http") 
       .bindingMode(RestBindingMode.json) 
       .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES") 
       .dataFormatProperty("json.in.enableFeatures", "FAIL_ON_NULL_FOR_PRIMITIVES"); 

     } 

    }; 
} 
+1

あなたのルート設定も指定してください。 – SubOptimal

+0

秒は何を意味していますか? camelcontextを起動すると、両方のルートが表示されますか? 1つのルートのみ? –

+0

最初または2番目のjettyBuilderを呼び出す順番によって異なります。私はサービスの1つにしか接続できません – pustypawel

答えて

0

短い答え:私はこれが原因で、私はバグを呼び出すことができる理由を、同じキャメルコンテキストで可能ですthnikません。異なるコンテキストでは可能かもしれません。


これをデバッグした後のいくつかの観察結果を示します。

1回目:質問のように。

Camelは両方の設定で同じJettyエンドポイントを使用します。 2番目のRouteBuilderは最初のRouteBuilderのエンドポイント設定を上書きします。したがって、予期される最初のサーバーはまったく実行されていません。

2回目のtry:複数のJettyエンドポイント。

ワン(桟橋エンドポイント(複数可)を作成し、コンテキストにそれらを追加した後)のようなものを試してください:

this.restConfiguration("jetty").... 
this.rest("/path").... // good 
... 
this.restConfiguration("jetty-tls").... 
this.rest("/path").... // produces exception! 

残りの定義はキャメルコンテキストに追加されているように見えます。 2番目のRouteBuilderのルートを作成する際に、最初のRouteBuilderの定義が既に存在します。キャメルは同じパスを持つ2つのルートを作成したいと例外がスローされます:

Failed to start route ... because of Multiple consumers for the same endpoint is not allowed: jetty:... 

残念ながら、ビルダーの一つで、残りの定義をスキップするオプションではありません。

ボーナスtry:複数のJettyエンドポイントと異なるパス。ここには、例外

this.restConfiguration("jetty").... 
this.rest("/path1").... // good 
... 
this.restConfiguration("jetty-tls").... 
this.rest("/path2").... // good 

が、キャメルは3つのルートを開始します。

一つは、少なくとも、これが動作するように期待していません!

関連する問題