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

Vertx:如何在保持单个verticle的情况下将路由器分离到不同的类别

屠盛
2023-03-14
router.get("/vehicles/:id").handler(ctx -> {
        LOG.info("Entering get vehicle details");
        getVehicleDetailsCounter.inc();
        vehicleApiImpl.getVehicleDetails(ctx, httpClient);
    });

    router.post("/vehicles/:id/journey").handler(ctx -> {
        // BOOK VEHICLE
        LOG.info("Entering book vehicle");
        startJourneyCounter.inc();
        vehicleApiImpl.startJourney(ctx, httpClient);
    });

    router.post("/vehicles/:id/trips/:tripId/reports").handler(ctx -> {
        LOG.info("Entering trip reports");
        tripReportsCounter.inc();
        getTripReports(ctx, httpClient);
    });

    router.get("/availableVehicles/:cityId").handler(ctx -> {
        LOG.info("Entering available vehicles");
        availableVehCounter.inc();
        getAvailableVehicles(ctx, httpClient);
    });

    router.get("/zonesDetails/:cityId").handler(ctx -> {
        LOG.info("Entering zones details");
        getZonesDetailsCounter.inc();
        vehicleApiImpl.getZonesDetails(ctx, httpClient);
    });

    router.get("/models").handler(ctx -> {
        LOG.info("Entering models");
        modelsCounter.inc();
        vehicleApiImpl.getModels(ctx, httpClient);
    });

    router.get("/options").handler(ctx -> {
        LOG.info("Entering options");
        optionsCounter.inc();
        vehicleApiImpl.getOptions(ctx, httpClient);
    });
    
    // ============================
    // USER
    // ============================
    LOG.info("Handler register : USER");

    // Payment Details
    router.post("/user/notifyAppPaymentTransaction").handler(ctx -> {
        LOG.info("Entering payment transaction");
        notifyAppPaymentTransaction(ctx, httpClient);
    });

    // The user current journey
    router.get("/user/currentJourney").handler(ctx -> {
        LOG.info("Entering get current journey");
        getCurrentJourneyCounter.inc();
        userApiImpl.getCurrentJourney(ctx, httpClient);
    });

    // Create a new user
    router.post("/users").handler(ctx -> {
        LOG.info("Entering create user");
        createUserCounter.inc();
        createUser(ctx, httpClient);
    });

共有1个答案

严亦
2023-03-14

例如,您可以在不同的处理程序中提取车辆路线。然后,在处理程序中,您可以选择在那里实现业务逻辑,或者更好地通过eventbus发送消息,在任何其他Verticle中使用该消息,在那里执行业务逻辑,并使用作为响应发送的消息的答案进行答复。

router.route("/vehicles/*").handler(VehicleHandler.create(vertx, router));

车辆操作者

public interface VehicleHandler extends Handler<RoutingContext> {
    static VehicleHandler create(Vertx vertx, Router router) {
        return new VehicleHandlerImpl(vertx, router);
    }
}

车辆装卸车

public class VehicleHandlerImpl implements VehicleHandler {

    private Router router;

    public VehicleHandlerImpl(Vertx vertx, Router router) {
         this.router = router;
         router.get("/:id/").handler(this::getVehicle);
         router.post("/:id/trips/:tripId/reports").handler(this::postReports);
         router.post(":id/journey").handler(this::postJourney);      
    }

    @Override
    public void handle(final RoutingContext ctx) {
         router.handleContext(ctx);
    }

    private void getVehicle(RoutingContext ctx) {
         //Option A: do you business logic here
    }

    private void postReports(RoutingContext ctx) {
        //Option B: send an eventbus message, handle the message in the MainVerticle and serve the response here   
    }

    private void postJourney(RoutingContext ctx) {
        //Option C: send an eventbus message, handle the message in a new Verticle and serve the response here 
    }
}
 类似资料:
  • 问题内容: 我需要在 不更改URL的情况下 进行路由。 在自己实现此功能之前,我尝试过通过React Router寻找一些东西。我看到有这样一个东西 : createMemoryHistory([options]) createMemoryHistory创建一个不与浏览器URL交互的内存历史对象。当您需要自定义用于服务器端呈现,自动测试的历史记录对象或不想操纵浏览器URL(例如,将应用程序嵌入到i

  • 点击Search by Name超链接时,URL会发生变化,但SearchByNameComponent会加载到app.component.html内容下面。如何在单击时只显示SearchbyNameComponent而不显示全部内容?target=_blank没有帮助。

  • 我有一个包含不和谐机器人代码的Python脚本。当我运行它时,它会激活不和谐机器人,并显示机器人的在线状态。但是,当我结束python脚本时,它会禁用bot。即使离线,我如何在不使用服务器的情况下保持机器人活动?

  • null 你认为我应该知道的其他方法?

  • 问题内容: 我的Angular应用程序允许用户加载项目,当发生这种情况时,我想设置一个包含该项目ID的查询字符串,以便如果用户刷新页面(或想要链接到该页面),则该URL已经存在设置(如果$ routeParams中存在ID,则已经有代码可以加载该项目)。 如何设置该查询参数而不引起路由?如果发生路由,页面上还有其他东西会重置(包括必须重新加载其所有数据的插件),因此仅更改查询参数很重要。 简而言之

  • 我对Vertx很陌生,但我对测试它与Spring的集成很感兴趣。我使用Spring Boot来提升项目,并部署了两个顶点。我希望他们使用事件总线相互通信,但失败了。这就是我所做的: > 在主应用程序中: @SpringBootApplication公共类MySpringVertxApplication{@Autowired MyRestAPIServer MyRestAPIServer;@Auto