2

API の非同期サポートを構築するために RxJava を検討しています。現在、jetty + JAX-RS @Path アノテーションを使用していますが、着信 REST API 呼び出しを RxJava API に結び付ける正しいアプローチが何であるかはわかりません。

基本的にこれは、DB からの応答の準備が整うまで、要求スレッドを解放するというコンテキストにあります。

Vert.x を見ましたが、それには Java 7 が必要で、現在は Java 6 に縛られています。

上記に関する提案を探しています。着信 http 要求を RxJava API に結び付けるために取る典型的なアプローチは何ですか。

4

2 に答える 2

1

次のようなものがJettyで機能するはずです。

public class ApiService {
    HttpClient httpClient;

    public ApiService(HttpClient httpClient,) {
        this.httpClient = httpClient;
    }

    public <RequestType, ResultType> Observable<ResultType> createApiObservable(final RequestType requestContent) {
        return Observable.create(new Observable.OnSubscribe<ResultType>() {
            @Override
            public void call(final Subscriber<? super ResultType> subscriber) {
                // Create the request content for your API. Your logic here...
                ContentProvider contentProvider = serializeRequest(requestContent);

                httpClient
                        .newRequest("http://domain.com/path")
                        .content(contentProvider)
                        .send(new Response.CompleteListener() {
                            @Override
                            void onComplete(Result result) {
                                // Pass along the error if one occurred.
                                if (result.isFailed()) {
                                    subscriber.onError(result.getFailure());
                                    return;
                                }

                                // Convert the response data to the ResultType. Your logic here...
                                ResultType resultContent = parseResponse(result.getResponse());

                                // Send the result to the subscriber.
                                subscriber.onNext(responseBytes);
                                subscriber.onCompleted();
                            }
                        });
            }
        });
    }
}
于 2014-08-20T17:09:39.033 に答える