java - 如何在java vertx中编写自己的异步处理程序

标签 java vertx3

我想编写一个带有一些参数和 Handler<E> 的函数目的。根据其他参数进行一些计算后,我需要在处理程序对象上返回结果。

为了更好地解释它,我举一个例子:

    public void getPlaces(LatLong latLong, int redius, Collection<PlaceType> places)
{
    if(redius <= 0 || redius > 50000)
    {
        throw new IllegalAccessError("redis can be 0 to 50000 meters only");
    }
    String uri = String.format(GOOGLE_PLACE_API_URI, latLong.getLatitude(), latLong.getLongitude(), redius, PROJECT_API_KEY, Joiner.on("|").join(places));


    HttpClientRequest request = httpClient.getAbs(uri, response ->{
        logger.info("Received response with status code={} message={}", response.statusCode(), response.statusMessage());
        response.bodyHandler( buffer -> {
            JsonObject result = buffer.toJsonObject();
            String nextPageToken = result.getString("next_page_token");
            JsonArray resultArray = result.getJsonArray("results");
            System.out.println("nextPageToken="+nextPageToken+" result="+resultArray);
        });

    }).setTimeout(30000);

    request.exceptionHandler(e -> {
        logger.error("Caught exception while making request for google place APIs. Error message={} e=", e.getMessage(), e);
    });
    request.end();
}

    public void getPlaces(LatLong latLong, int redius, Collection<PlaceType> places, Handler<JsonObject> response)
{
    // COMPLETE THIS USING ABOVE FUNCTION
    getPlaces(latLong, redius, places);
}

最佳答案

我不确定您的需求,但我想您想使用计算结果调用处理程序。所以这段代码应该做你想要的:

public void getPlaces(LatLong latLong, int redius, Collection<PlaceType> places, Handler<JsonObject> handler) {

    if(redius <= 0 || redius > 50000) {
        throw new IllegalAccessError("redis can be 0 to 50000 meters only");
    }

    String uri = String.format(GOOGLE_PLACE_API_URI, latLong.getLatitude(), latLong.getLongitude(), redius, PROJECT_API_KEY, Joiner.on("|").join(places));

    HttpClientRequest request = httpClient.getAbs(uri, response ->{
        logger.info("Received response with status code={} message={}", response.statusCode(), response.statusMessage());
        response.bodyHandler( buffer -> {
            JsonObject result = buffer.toJsonObject();
            String nextPageToken = result.getString("next_page_token");
            JsonArray resultArray = result.getJsonArray("results");
            System.out.println("nextPageToken="+nextPageToken+" result="+resultArray);
            handler.handle(result); // call the result handler
        });

    }).setTimeout(30000);

    request.exceptionHandler(e -> {
        logger.error("Caught exception while making request for google place APIs. Error message={} e=", e.getMessage(), e);
    });
    request.end();
}

希望这会有所帮助。

关于java - 如何在java vertx中编写自己的异步处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35274899/

相关文章:

java - vert.x getting - 未能创建子事件循环

java - Facebook Messenger - 气泡弹出窗口

java - 您如何找到 System.loadLibrary() 在哪里查找库?

javascript - 带有 IntelliJ IDEA 的 Vertx JavaScript "ClassNotFoundException"

java - 我的 Rest API 层的 Vertx 模型绑定(bind)

java - 来自数据库的 Vertx shiro 身份验证

vert.x - 如何从命令行传递 VertxOptions(如工作线程)

java - solrj :Always get 403 code when send request to Solr by using SOlrj

Java 单点登录 : Kerberos authentication against Active Directory

当我从终端运行 java 文件时出现 java.lang.NoClassDefFoundError