1

Camel を RESTful Web サービスのクライアントとして活用したいとします。しかし、キャメルがそのような仕事に適しているかどうかはわかりません. また、cxf ではなく、http4 または ahc コンポーネントを使用したいと考えています。

一般に、必要なルートは 2 種類だけです。

  1. Bean から -> Json にマーシャリング -> 静的 URI を使用して Ahc に -> Json からアンマーシャリング -> Bean に。静的 uri の例:ahc:http://host/api/user/create
  2. Bean から -> Json にマーシャリング -> 動的 URI を使用して Ahc に -> Json からアンマーシャリング -> Bean に。動的 uri の例:ahc:http://host/api/user/id/1

次のような方法でそのようなルートを起動するサービス クラスがあると思います。

UserService {

    @Autowired
    protected CamelContext restApiCamelContext;

    public UserCreateResponse createUser (UserModel user) {
        ... Camel's magick which starts create user route ...
    } 

    public UserModel getUserById (Long id) {        
        ... the id must be placed somehow into endpoint uri: http://host:port/api/user/id/${id} ...
        ... Camel's magick which get user by id ...
    }
}

UserService は、Spring MVC コントローラーで使用されることになっています。

では、Camel の機能に基づいてそのような UserService を実装することは可能ですか? はいの場合、スプリングコントローラーにやってくる大量のユーザーリクエストの高圧下でうまく機能しますか? 100 近くの異なる uris で問題なく動作しますか?

4

2 に答える 2

0
  1. Bean から -> Json にマーシャリング -> 静的 URI を使用して Ahc に -> Json からアンマーシャリング -> Bean に。
  2. Bean から -> Json にマーシャリング -> 動的 URI を使用して Ahc に -> Json からアンマーシャリング -> Bean に。

CAMELメソッドto()とrecipientList()の違いは、toメソッドはキャメルの動的パラメータを解析できないのに対し、recipientListメソッドは解析できないことです。

from("restlet:/your/some/address/{sourceId}?restletMethods=GET")
.log("execute '${header.sourceId}' for something").to("log:WebRequestThroughput?groupSize=10")
.beanRef("yourServiceBeanRef", "serviceMethodName")
.marshal().json(JsonLibrary.Jackson)
.to("http://domain/address/?bridgeEndpoint=true&throwExceptionOnFailure=true")
.unmarshal().json(JsonLibrary.Jackson, YourResponseObject.class)
.beanRef("anotherServiceBeanRef", "anotherMethodName");


from("restlet:/your/address/{sourceId}?restletMethods=GET")
.log("execute '${header.sourceId}' for something").to("log:WebRequestThroughput?groupSize=10")
.beanRef("yourServiceBeanRef", "serviceMethodName")
.marshal().json(JsonLibrary.Jackson)
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.POST))
.recipientList(simple("http://domain/address/${header.sourceId}?bridgeEndpoint=true&throwExceptionOnFailure=true"))
.unmarshal().json(JsonLibrary.Jackson, YourResponseObject.class)
.beanRef("anotherServiceBeanRef", "anotherMethodName");
于 2014-08-07T08:50:09.287 に答える
0

CamelHttpUri のメッセージ ヘッダーを動的に設定することで、リクエスト uri を変更できます。ビジネス ロジックが単純な場合は、単純なキャメル ルートを作成するだけで作業を実行できると思います。次に、camel ProducerTemplate を使用してリクエストを camel ルートに送信します。

于 2013-08-05T07:16:34.227 に答える