当前位置: 首页 > 知识库问答 >
问题:

垂直x静止垂直

云德辉
2023-03-14

我对Vert.x非常陌生,就像几天前一样。我来自一个JAX式的,安逸的世界。我可能大错特错,请指正。

我的问题是:如何使顶点公开自己的REST接口(子路由器),以及如何将其子路由器注册到应用程序的主路由器中?

我尝试过类似的东西,但是当我请求/产品/所有:(

public class ProductsVerticle extends AbstractVerticle {

@Override
public void start(Future<Void> startFuture) throws Exception {
    super.start(startFuture);
}

public static Router getRouter() {
    Router router = Router.router(Vertx.vertx());

    router.get("/all").consumes("application/json").produces("application/json")
            .handler(routingContext -> {
                routingContext.response()
                        .putHeader("content-type", "text/html")
                        .end("<h1>Products</h1>");
            });

    return router;
}

}

public class ServerVerticle extends AbstractVerticle {

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

    Router mainRouter = Router.router(vertx);
    ProductsVerticle productsVerticle = new ProductsVerticle();

    vertx.deployVerticle(productsVerticle, handler -> {
        if (handler.succeeded()) {
            LOG.info("Products Verticle deployed successfully");
            mainRouter.mountSubRouter("/products", productsVerticle.getRouter());
        }
    });

    mainRouter.get("/static").handler(routingContext -> {
        routingContext.response()
                .putHeader("content-type", "text/html")
                .end("<h1>Hello from my first Vert.x 3 application</h1>");
    });

    HttpServer server = vertx.createHttpServer();
    server.requestHandler(mainRouter::accept);
    server.listen(8090);
}

}

共有2个答案

苏志
2023-03-14

我最近为 vert.x 编写了一个简单的 JAX-RS 注释库。
在它的方法上,它类似于休闲。

https://github.com/zandero/rest.vertx

伯和蔼
2023-03-14

所以如果你想要,你可以拥有,但是你必须自己去做。不好意思:d。

例如:

class Server extends AbstractVerticle {

    @Override
    public void start() throws Exception {
        List<AbstractVerticle> verticles = searchForVerticlesWithMyAnnotation();
        verticles.forEach((V) = > router.add(V));
    }

}

@MyOwnJax(path = "/blaa")
public class TestService {
}

@interface MyOwnJax {
    String path();
}

“搜索”方法“我的注释”在这里是棘手的事情。它不应该是放慢速度。但是,如果你无论如何都使用Spring,你可以使用类似的东西:组织.Spring框架.上下文.注释.类路径扫描候选组件提供程序

或在此处查看 : 堆栈溢出:搜索批注@runtime

但是这是一个很大的但是。;)也许你有一个比Spring更好的主意来制作你的REST api?在我看来,Spring真的很“klobby ”,而Vertx.x真的很流畅。(很抱歉,我的观点不太实际。)

我在我的应用程序中使用DI的方法。这意味着:

router.route(HttpMethod.GET,
 "/user/login").handler(injector.getInstance(ILoginUser.class));

使用正常的guise框架作为注射器。虽然这只是一个界面,但在你必须改变启动服务器的顶点中的东西之前,你可以做出非常大的改变。(实际上,大多数情况下,如果您必须添加或删除路径)

总结:

>

  • 如果你想有一个Spring的方法,你必须使用反射或使用反射的库。缺点:启动性能,有时有点神奇,很难找到错误/调试。优点:如此易于测试,真的非常容易扩展功能

    在路径本身上注册顶点。缺点:您必须在“服务器”顶点上添加/删除路径。好处:启动性能,没有魔力,完全控制发生的事情和时间。

    那只是一个简短的总结,许多要点没有提到。但我希望这能回答你的问题。如果你有以下问题,就写下来!

    嘲笑,

    车工业协会

  •  类似资料:
    • 我有下面的垂直类: 我的html文件是: 我使用了“StaticHandler.create…”以便为客户端文件夹中的所有静态文件提供服务。正如您所理解的,我希望一旦服务器收到对“localhost:3000/hello”的GET请求,客户端将获得一个HTML页面,该页面将调用app。js文件。 不幸的是,我做不到。指数html已加载,浏览器无法加载应用程序。js。 重要的是要注意该索引。html

    • 假设我有一个类似这样的竖线(有意简化以便于解释我的问题)。 现在想象一下,MyService是事件驱动的,当服务中发生某些事件时,我想停止顶点。 是否有人对Vert有更多经验。x知道如何做到这一点?或者,也许有人会给我一些建议,告诉我什么是正确的替代方法?

    • 我刚刚开始学习vert. x,对它是如何工作的仍然感兴趣...我在想: 当反应性非阻塞垂直线卸载到阻塞垂直线时,阻塞垂直线在工作线程上运行。 1.what事件循环线程,关闭加载的工作,在同一时间?从循环中获取另一个事件? 返回a结果时,同一事件循环是否继续执行?还是另一个? 1的答案是什么 我觉得我错过了一些基本的东西,关于事情实际上是如何工作的。谢谢你的帮助!

    • 我正在尝试为Vert开发概念验证。一款简单的实时浏览器游戏。 让我们想象一个类似于在线扑克的游戏——你有一个大厅,里面有许多你可以加入的现有游戏。你也可以创建一个新游戏(所以大厅里的游戏数量是可变的)。在这之前,你有一个异步超文本传输协议服务器(集群),玩家可以连接到它。尤其是在特定的游戏中,一切都是实时的,所以当玩家执行某个操作时,其他人会立即看到它,而无需刷新或定期ajax轮询。 我在考虑如何

    • 我面临着一个与垂直的问题。x、 当超时被触发时,它会生成一个响应,然后实际响应(需要10秒)出现并尝试进行响应,因此我得到: JAVAlang.IllegalStateException:已写入响应 我是Vert的新手。x和我不确定想要的行为,我应该怎么做?,由于代码是异步的,我找不到检查响应是否已经发送的方法。 有没有办法做到这一点? 我有以下代码:

    • 我想用一个用Kotlin编写并使用Vert的现有项目测试Quarkus和Docker的本机映像。x个竖线。 你能给我举一个关于如何使用Quarkus部署Verticle的例子吗? 我的依赖项是和。 我在Vert. x扩展测试中找到了一些例子,但是我找不到如何在服务器启动时部署我的Verticle。