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初体验的主要内容,如果未能解决你的问题,请参考以下文章