リダイレクトする必要があるすべてのパスに一致するサーブレットマッピングを設定できる場合(たとえば、foo/*
のようなパスは常にリダイレクトされます)、非常に簡単です。これで問題が解決しない場合は、後で回答を編集しようとします。
公式ドキュメントの関連ページis here。サーブレットコンテナ(Jetty)を既に設定して実行しているので、興味深い例はservlet componentを使用した例です。
まず、Camelサーブレットを設定する必要があります。既存のサーブレットの構成方法によって異なります。あなたが持っていると、とにかく
@Bean
public ServletRegistrationBean servletRegistrationBean() {
CamelHttpTransportServlet servlet = new CamelHttpTransportServlet("CamelServlet");
servlet.setServletName();
return new ServletRegistrationBean(servlet,"/foo/*");
}
:例えば、web.xmlファイルを使用して、追加:あなたは春ブートを使用している場合は、
<servlet>
<servlet-name>CamelServlet</servlet-name>
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CamelServlet</servlet-name>
<url-pattern>/foo/*</url-pattern>
</servlet-mapping>
をそれとも、あなただけの、次のBeanを登録することができますあなたのJettyのインスタンスに登録キャメルサーブレットは、あなたは、サーブレット・コンポーネントを使用して、すべてをリダイレクトすることができます。
from("servlet:foo?matchOnUriPrefix=true")
.to("http4://new.com/foo?bridgeEndpoint=true&throwExceptionOnFailure=false");
http4
はです、Apache HTTPClient 4.xに基づいています。 (必要に応じて、HTTPClient 3.xで引き続きHTTP componentベースを使用できます)。
matchOnUriPrefix=true
は、ワイルドカード
bridgeEndpoint=true
たちは
throwExceptionOnFailure=false
がちょうどキャメルによって処理されず、呼び出し側に中継されますnew
サーバから返されたエラーを意味し、プロキシとして動作していることと一致します。
http://old.com/foo/some/crazy/path/i/just/made/up
への要求は(単に最初の発信者に転送されるnew.com
サーバーから404エラーで、おそらく結果)http://new.com/foo/some/crazy/path/i/just/made/up
にリダイレクトされるべきです。
あなたは「既存のRESTエンドポイント」について言及しています。私はサーブレットレベルに落とさずに、既存のRESTエンドポイントをCamelと直接統合することを検討したいと考えています。 CXFRSとCXF BeanのコンポーネントをチェックアウトしてApache CXFを使ってJAX-RSを使用するのはかなり簡単ですが、既存のコントローラでCamel ProducerTemplateを使用してCamelルートにメッセージを送信することもできます。ユースケース(URLパスの幅広い範囲をリダイレクトするか、特定のURLパスのみをリダイレクトするなど)と既存のRESTエンドポイントについて詳しく説明すると役立ちます。 –
お時間をいただきありがとうございます。以前は私たちのアプリケーションが単一のバックエンド(original.comと呼んでいました)と連絡を取りました。ここでいくつかの機能を抽出し、それらのためのマイクロサービスを作成しました。つまり、original.com/moved-context-pathを新しいバックエンドnew.com/moved-context-pathにリダイレクトする必要があります。選択したREST API – DanglingPointer
のプロキシとしてApache Camelを使用してデプロイしたいと思います。同じアプリケーションにいくつかのRESTサービス実装(これまでに抽出されていないもの)と外部RESTサービスへのリダイレクト(新しいキャメルルート)。あなたは残りのRESTサービスを公開するために何を使用しますか? JAX-RS(そうなら、それはCXFですか?)、spring-mvc、Restlet、多分何か?また、 'original.com/foo/*'のようなパスや 'original.com/foo/bar1'や' original.com/foo/bar2'のような特定のパスだけを盲目的にリダイレクトしたいのですか? –