vertx因爲性能較高,逐漸變得流行。下面將一個vertx的入門案例。java
添加依賴web
<!-- vertx --> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-core</artifactId> <version>3.5.0</version> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-web</artifactId> <version>3.5.0</version> </dependency>
1:建立一個vertical,可以對url進行攔截sql
package payItem.main; import java.util.HashMap; import java.util.Map; import com.yiji.openapi.tool.fastjson.JSON; import io.vertx.core.AbstractVerticle; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpMethod; import io.vertx.core.json.Json; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; public class AutoAccountVerticle extends AbstractVerticle{ public void start(){ Router router=Router.router(vertx);//建立路由 router.route().handler(BodyHandler.create()); //處理請求體body router.route("/autoAccount").handler( //攔截url ctx -> { //上下文 String username=ctx.request().getParam("username"); //得到請求中的參數 String password=ctx.request().getParam("password"); JsonObject jo=new JsonObject(); jo.put("username", username).put("password", password); //將參數轉化爲json數據,添加到JsonObject vertx.eventBus().<JsonObject> send( //事件總線,交由處理程序處理,此次請求 AutoAccountService.AUTO_ACCOUNT_SERVICE_URL, //處理程序的url jo, //傳遞給處理程序的消息體,只能是基本數據類型或者JsonObject類型 result -> { //返回結果 if(result.succeeded()){ System.out.println(""+result.result().replyAddress()); ctx.response() //對前臺的響應。 .putHeader("content-type", "application/json") .end("JSON_CB(Json.encodePrettily(result.result().body()))"); //返回jsonP數據。 // .end(Json.encodePrettily(result.result().body())); //返回json數據。 }else{ ctx.response().setStatusCode(400) .end(result.cause().toString()); } } ); }); vertx.createHttpServer().requestHandler(router::accept).listen(8080); } }
2:建立處理事件json
package payItem.main; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; /** * 處理程序 * @author admin * */ public class AutoAccountService extends AbstractVerticle { private SQLClient sqlClient; public static String AUTO_ACCOUNT_SERVICE_URL="AUTO_ACCOUNT_SERVICE_URL"; public void start(){ vertx.eventBus().consumer(AUTO_ACCOUNT_SERVICE_URL, //處理的URL msg -> {//接收的消息 JsonObject jo=(JsonObject) msg.body(); System.out.println(jo); //處理請求消息 msg.reply(jo); //返回的消息,給result。 } ); } }
3:在主函數中發佈verticle,每一個verticle,都能成爲一個服務,只需添加vertx.createHttpServer().requestHandler(router::accept).listen(8080)便可,這樣裏面就能夠設置路由功能。api
可是帶有主函數的verticle只能有一個瀏覽器
package payItem.main; import io.vertx.core.Vertx; public class AutoAccountMain { public static void main(String[] args) { Vertx vertx=Vertx.vertx(); vertx.deployVerticle(new AutoAccountService()); vertx.deployVerticle(new AutoAccountVerticle()); } }
4:訪問:http://localhost:8080/autoAccount?username=1&passward=2app
瀏覽器顯示:函數
JSON_CB(Json.encodePrettily(result.result().body()))