spring boot 整合Vert.x

Posted

tags:

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

参考技术A 在后台接口开发中,没有必要引入一些tomcat,或jetty这些web容器,同时提高系统的性能,提高系统的并发性,Vert.x 是以非阻塞IO的思想来实现高性能,非阻塞IO的实现,依据netty为底层基于Netty,大大降低了传统阻塞模型中线程对于操作系统的开销,因此相比较传统的阻塞模型,异步模型能够很大层度的提高系统的并发量。

下表是一个整合的小案例

@Component

public class StaticServer extends AbstractVerticle

    @Override

    public void start() throws Exception

        Router router = Router.router(vertx);

        router.route().handler(BodyHandler.create());

        //请求路径

        router.get("/v1/customer")

                //.produces("application/json")

                //使用evenloop线程执行

                //.handler(this::getCustomerById);

                //创建新的线程执行(一般用于执行阻塞调用)

                .blockingHandler(this::getById);

            router.route().handler(StaticHandler.create());

            // 开启监听端口

            vertx.createHttpServer().requestHandler(router).listen(8080);

   

    /**

      *  模拟调用方法

    * @param rc

    */

    private void getById(RoutingContext rc)

    //获取请求参数

        Long id = Long.parseLong(rc.request().getParam("id"));

        System.out.println(id);

        /*

            * 返回请求值

        */

        rc.response().

        setStatusMessage("ok") //  http响应状态描述值

        .setStatusCode(200)//  http响应状态码

        .end("this is ok"); //返回内容

     



配置springboot启动类

@SpringBootApplication

public class App

@Autowired

    private StaticServer staticServer;

public static void main(String[] args)



try

 // 不让springboot以web启动

new SpringApplicationBuilder(App.class).web(WebApplicationType.NONE).run(args);

catch (Exception e)

e.printStackTrace();





@PostConstruct

    public void deployVerticle()

        Vertx.vertx(new VertxOptions()).deployVerticle(staticServer);

   



然后浏览器访问http://127.0.0.1:8080/v1/customer?id=11 即可

后台会获取到请求参数id为11 

Vert.x系列(零),开篇,认识Vert.x并创建一个Http服务

1、介绍

Vert.x 是 Netty 的最佳实践之一,也是目前最快的Java框架。

如果对Spring的配置式编程已经厌烦,那么欢迎拥抱 Vert.x,再次享受成为开发人员的乐趣。

Vert.x 支持与多种语言一起使用,Vert.x3支持Java、Kotlin、JavaScript、Groovy、Ruby和Scala。如果你喜欢的是Ruby、Python、Clojure、Ceylon这些语言就要选择Vert.x2了。

Web开发、REST API、RPC、IoT、微服务这些应用场景Vert.x都适用。


2、创建一个简单的Http服务

使用Maven构建项目,在pom文件中引用vertx-web依赖。

2.1、创建Maven项目

mvn archetype:generate

这条命令是用来创建一个maven项目的,按提示填写groupId、artifactId、packageName等信息。笔者的groupId和packageName是com.javafm.vertx ,artifactId是SimpleHttpServer。然后在idea中打开这个项目。

2.2、在pom.xml中加入vertx-web依赖

<dependency> <groupId>io.vertx</groupId> <artifactId>vertx-web</artifactId> <version>3.8.5</version></dependency>

2.3、创建一个SimpleHttpServerVerticle类,继承AbstractVerticle,重写start(

package com.javafm.vertx;
import io.vertx.core.AbstractVerticle;import io.vertx.core.http.HttpServer;import io.vertx.core.http.HttpServerResponse;
public class SimpleHttpServerVerticle extends AbstractVerticle { @Override public void start() throws Exception { HttpServer server = vertx.createHttpServer();
server.requestHandler(request -> { HttpServerResponse response = request.response(); response.putHeader("content-type", "text/plain"); response.end("Hello World!"); });
server.listen(8080); }}

接着在App类中发布SimpleHttpServerVerticle

package com.javafm.vertx;
import io.vertx.core.Vertx;
public class App { public static void main(String[] args) { Vertx.vertx().deployVerticle(new SimpleHttpServerVerticle()); }}

2.4、在App类中,右键运行http服务,在浏览器打开http://localhost:8080,可以看到下图界面,表示http服务创建成功了。

2.5、代码解释

核心代码在SimpleHttpServerVerticle中,这个类继承了AbstractVerticle,在Vert.x中一切皆是Verticle。每一个Verticle都是一个独立的单元。每个Verticle都需要通过deployVerticle方法部署。先暂时这样理解,随着代码越写越多,到时会有更深刻的领悟。

注意server.requestHandler(),表示将服务监听所在端口的所有http请求都路由到这个匿名函数中处理。目前内部没有任何逻辑,只是简单的返回了一个字符串。

看着上面的代码是不是感觉Vert.x写Http服务与Spring的大不同之处。跟着笔者一步步探索Vert.x应用开发。

本节源代码:https://gitee.com/dev-tang/learning-vertx/tree/learn-01/

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

Spring Boot如何整合Redis

Spring Boot如何整合Redis

Spring Boot:Spring Boot整合FreeMarker

spring boot 系列之四:spring boot 整合JPA

Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ

Spring Boot系列Spring Boot整合持久层