分享

[土法煉金] 開工

之前説過將會用vert.x為核心擴展一個自己的framework。今天就來開始動工,一開始當然就是一個空白的項目。
project dependencies
  

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>

<groupId>com.ethopia</groupId>
<artifactId>puzzle</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
    <vertx.version>4.0.0</vertx.version>

</properties>

<dependencies>
    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-core</artifactId>
        <version>${vertx.version}</version>
    </dependency>
    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-web</artifactId>
        <version>${vertx.version}</version>
    </dependency>
</dependencies>
</project>

[探路客 code 排版好奇怪 😓]
主要的library 為 vertx-core 和 vertx-web。這樣就足夠我們搭建 http server了。 

第一個Verticle
Verticle 是 vert.x 一個很重要的概念,可以把他理解爲一個工作單位,一個server 或者一個 service。一個 verticle可以部署多個 verticle,可以很方便的把每一個功能分開。
現在試寫一個可以啓動 http 服務器的 Verticle:
  

package com.ethopia.puzzle;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;

import java.util.concurrent.TimeUnit;

public class MainVerticle extends AbstractVerticle {

private HttpServer httpServer;

private void initializeHttpServer(){
       HttpServerOptions options = new HttpServerOptions()
               .setPort(8080)
               .setTcpKeepAlive(true)
               .setIdleTimeoutUnit(TimeUnit.MINUTES)
               .setIdleTimeout(3);

httpServer = vertx.createHttpServer(options);
   }

private void setupRoute(){
final Router router = Router.router(vertx);
       router.route("/testing").handler(routingContext -> {
           HttpServerResponse response = routingContext.response();
           response.end("hello from /testing");
       });
httpServer.requestHandler(router);
   }

private void bindWebPort(){
httpServer.listen(ar->{
if(ar.succeeded()){
               System.out.println("listening to port:"+ar.result().actualPort());
           }else{
               ar.cause().printStackTrace();
           }
       });
   }

@Override
public void start() throws Exception {
       initializeHttpServer();
       setupRoute();
       bindWebPort();

   }
}

每當 verticle 被啓動時, start() 會被執行,這裏initializeHttpServer()便是用  vertx-core 做一個嵌入式的 http server,這時服務器還沒開始接受 request。
setupRoute() 中簡單的設置了一個 route,單純的輸出一段 hello from /testing。
最後 bindWebPort 開始接受 web request。
啓動啦~
這裏并沒有 main(),所以必須借用 io.vertx.core.Launcher, 設定如圖:
核心 JAVA framework

IntelliJ 執行設定

這裏只需注意 program arguments 不寫錯 class 路徑就沒問題了。如無意外結果應該是這樣的:
核心 JAVA framework

運行結果

現在可以試試用chrome 訪問 http://localhost:8080/testing
核心 JAVA framework
一個簡單的http 服務器就設置成功了。這裏主要演示一下 vert.x 本身的功能,當然因爲 api設計很彈性也造成很多事情需要手動設置。下一篇應該可以説説應該怎麽運用 vertx-web 讓代碼佈局更合理。
#核心  #JAVA  #framework 
分類:學習

本職為全棧式工程師,來自馬來西亞。總會逼著自己去瞭解新IT圈子新事物,是個偏執的技術人。

評論
上一篇
  • 更多文章
    載入中... 沒有更多了