work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Vertx 创建HTTP服务

Posted on 2022-02-14 18:22  work hard work smart  阅读(270)  评论(0编辑  收藏  举报

Vertx底层通信框架依赖于Netty,并封装了对Http协议的支持,因此可以非常方便的进行Web开发,且不依赖于任何中间件。

下面简单实现一个HttpServer

1、引入依赖

        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-core</artifactId>
            <version>3.5.2</version>
        </dependency>

  

2、创建核心代码

public class MyHttpServer {

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        HttpServer server = vertx.createHttpServer();

        server.requestHandler(request -> {
            HttpServerResponse response = request.response();
            //设置响应头
            response.putHeader("Content-type","text/html;charset=utf-8");
            // 响应数据
            response.end("Hello World");
        });
        // 监听8888 端口
        server.listen(8888);
    }


}

  

3、访问http://localhost:8888/

 

4、代码改进

上面的代码有个很大的问题,所有的代码都写在Main方法中。Vert.x推荐的写法是为每一个应用创建一个Verticle,也就是Vert.x的模块,然后通过Vertx核心接口,部署Verticle模块。多个Verticle模块之间可以通过EventBus进行相互调用。

下面我们创建一个HttpServer的Verticle模块,不部署到Vertx中,实现步骤如下:

1、创建一个类,集成AbstractVerticle类

2、重写start方法和stop方法,在start方法中处理业务逻辑,stop方法中释放资源。

3、在main方法中部署Verticle模块

4、启动服务,并通过浏览器进行访问。

代码如下:

public class MyHttpServer2 extends AbstractVerticle {

    public static void main(String[] args) {
        MyHttpServer2 verticle = new MyHttpServer2();
        Vertx vertx = Vertx.vertx();

        //部署verticle,这里会调用start方法
        vertx.deployVerticle(verticle);
    }

    @Override
    public void start() throws Exception {
        // 在这里可以通过this.vertx获取到当前的Vertx
        Vertx vertx = this.vertx;
        HttpServer server = vertx.createHttpServer();

        server.requestHandler(request -> {
            HttpServerResponse response = request.response();
            //设置响应头
            response.putHeader("Content-type","text/html;charset=utf-8");
            // 响应数据
            response.end("Hello World");
        });
        // 监听8888 端口
        server.listen(8889);
    }

    @Override
    public void stop() throws Exception {
        super.stop();
    }
}

  

参考:https://blog.csdn.net/king_kgh/article/details/80804078