1

camel を使用して安らかな Web サービスを利用しようとしています。

そのために、実行時に RESTful URL が作成されるため、動的エンドポイント URL を構成しています。CamelContext クラスの次のメソッドを使用して、特定のエンドポイント URL がキャメル コンテキストのルートとして登録されているかどうかを毎回確認しています。

エンドポイント hasEndpoint(String uri);

この場合、エンドポイントが登録されていない場合は、カスタム ルート ビルダーを使用してキャメル コンテキストにルートを追加します。

これにはキャメルHTTPコンポーネントを使用しています。これは今のところ私にとってはうまくいっています。

ただし、ルートがキャメルコンテキストに登録されているかどうかを毎回確認し、登録されていない場合はWebサービス呼び出しを行う前に同じものを登録する必要があるため、パフォーマンスに関してはこれは良くないと思います。

camel で RESTful Web サービスを利用するためのより良い方法があれば教えてください。

また、使用している RESTful Web サービスが OAuth 2.0 プロトコルを使用しているかどうかも知りたいのですが、コードを使用しているだけなので、コードを変更する必要はありますか?

よろしく、 ニロパル


お返事をありがとうございます。

ルートが既に存在するかどうかを確認して、キャメル コンテキストに重複したルートを追加しないようにしています。

長寿命のルートとルートのダイナミクスについて、これについて少し説明してもらえますか? ルート ダイナミクスを実装するにはどうすればよいですか?

また、CXF-RS プロデューサーの例を教えていただけると助かります。CXFRS のドキュメントを読みましたが、明確に理解できませんでした。

ありがとうニロパル

4

2 に答える 2

1

電話をかける前に、ルートが登録されているかどうかを確認する必要があるのはなぜですか?おそらく、より長寿命のルートを設定し、リソースをいっぱいにするために動的なルートを設定する必要があります。

Rest with camelに関しては、HTTPコンポーネントは素晴らしい仕事をしていると思いますが、REST用に設計された、より高いレベルのコンポーネントも使用できます。 CXFRSRestlet 、restletのプロデューサーの例は、このRestletProducerGetTest.javaなどのApacheCamelソースユニットテストにあります。

oAuth 2.0に関しては、Camelには、特にgoogleに対していくつかのoAuthサポートが組み込まれています。gauthコンポーネントを探します。チュートリアルもありますが、それはあなたのケースと一致していないかもしれません、それでもあなたがあなたの問題を解決することができるようにいくつかの背景を与えるかもしれません:http: //camel.apache.org/tutorial-oauth.html

于 2012-08-21T18:32:51.133 に答える
0
CamelContext context = new DefaultCamelContext();

私の狙い

受信リクエストをインターセプトしようとしていますが、受信リクエストの IP に基づいて、get offer の動的エンドポイントを呼び出したいと考えています。

context.addRoutes(new RouteBuilder(){
     public void configure(){

     from("jetty:localhost:9000/offers")
     .process(new Processor(){
         public void process(Exchange exchange) throws Exception {

            //getting the request object
            HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);
            //Extracting information from the request
            String requestIP=req.getRemoteAddr();

            /**
             * After getting the ip address i do necessay processing
             * and then add a property to exchange object.
             * Destination ip address is the address to which i want to   
             * send my request
             */

           exchange.setProperty("operatorAddress",destinationIpAddress);


       }
      })
     .to("direct:getOffers")
     .end();
}
});

ここで、getOffers エンドポイントを呼び出します

なのでまずは登録します

context.addRoutes(new RouteBuilder(){
     public void configure(){
         from("direct:getOffers")
         .toD("jetty:${property.operatorAddress}/api/v2.0/offers? 
          bridgeEndpoint=true")
        .end();

    }
});

交換オブジェクトの operatorAddress プロパティに次のようにアクセスできます。

${property.operatorAddress}

また、動的ルートがある場合は、呼び出す必要があります

.toD()   and not .to()
于 2016-08-25T14:53:22.397 に答える