• 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.vertx();
        vertx.deployVerticle(MainVerticle.class.getName());
      }
    
    }
    

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

    image-20200128104422795

    image-20200128104506833

    将服务打包成一个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启动却没有这个问题,如果有人知道答案请在评论后方留言,感激不尽。

    参考:https://vertxchina.github.io/vertx-translation-chinese/start/Start.html

  • 相关阅读:
    windows程序设计第4章Text Output练习(831121)
    约瑟夫问题的递归公式
    哈希(hash)以及C++标准库哈希(std::hash)
    返回顶部的一段代码
    对于使用 UNIKON ALL 中表的顺序
    正则表达式的实际运用
    json.help
    省市区联动
    一个JS时间选择控件
    (转)C# Enum,Int,String的互相转换 枚举转换
  • 原文地址:https://www.cnblogs.com/dagger9527/p/12237563.html
Copyright © 2020-2023  润新知