Vert.x初体验

Posted dagger9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vert.x初体验相关的知识,希望对你有一定的参考价值。

源码:https://github.com/dagger9527/vertx_demo

项目工程:quickstart

vert.x最大的特点是异步编程、非阻塞式。非阻塞式的方式可以让单线程以最大的效率处理客户端请求,最大幅度的利用单核处理器的优势。和多线程编程的方式不同,异步编程是单线程的,它在接收一个请求时,会将这个请求作为一个任务放到循环事件队列中,然后在后台依次执行队列中的任务,它不会阻塞后来的请求,所有对请求的处理操作都在后台完成。

添加maven依赖

<dependencies>
    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-core</artifactId>
    </dependency>
</dependencies>

创建一个异步服务器,需要创建一个类然后继承AbstractVerticle,重写其中的start方法,需要在start方法中创建http服务器。

属性vertx在AbstractVerticle中是已经定义的,可以直接使用,它代表的当前Verticle的实例对象。

HttpServerOptions类是创建Http服务器的配置类,设置服务器启动端口是8080。

requestHandler方法是处理请求的逻辑实现,响应内容为Hello World,注意最后的end方法不能少,不然客户端会一直等待响应。

public class MainVerticle extends AbstractVerticle {

  private Logger logger = LoggerFactory.getLogger(MainVerticle.class);

  @Override
  public void start() throws Exception {
    // 创建一个http服务器,并监听8080端口
    vertx.createHttpServer(
      new HttpServerOptions()
        .setPort(8080)
    ).requestHandler(request -> {
      request
        .response()
        .putHeader("Content-Type", "text/html;charset=UTF-8")
        .end("<h1>Hello World</h1>");
    }).listen();
    logger.info("MainVerticle Server Starting..");
  }

}

Verticle实现类有了之后,需要一个main方法去启动它。

再创建一个vertx对象,通过deployVerticle部署刚刚的Verticle实例。

public class MainLauch {

  public static void main(String[] args) {
    Vertx vertx = Vertx.factory.vertx();
    vertx.deployVerticle(MainVerticle.class.getName());
  }

}

运行main方法,可以看到控制台打印日志,说明http服务已启动。访问本地8080端口。

技术图片

技术图片

将服务打包成一个jar包

继续添加 maven-shade-plugin 插件

Main-Class标签声明main方法所在类

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>${maven.shade.plugin.version}</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <manifestEntries>
                            <Main-Class>${main.class}</Main-Class>
                        </manifestEntries>
                    </transformer>
                </transformers>
                <artifactSet />
                  <outputFile>${project.build.directory}/${project.artifactId}.jar</outputFile>
            </configuration>
        </execution>
    </executions>
</plugin>

在quickstart项目命令行下运行 mvn clean install,当前target目录下发现quickstart.jar,运行java -jar quickstart.jar,再次访问本地8080端口,发现服务正常启动。

注意当前http服务打包成jar文件之后,响应给浏览器会有中文乱码问题。但是用idea启动却没有这个问题,如果有人知道答案请在评论后方留言,感激不尽。

以上是关于Vert.x初体验的主要内容,如果未能解决你的问题,请参考以下文章

Vert.x 创建HTTP服务-原理篇

vs code初体验

Spring Webflux vs Vert.x

Vert.x - 带有 DataInputStreams 的 GraphQL 订阅

Vert.x 操作数据库

Vert.x 操作Redis