正在学习 Vertx,请教一下给位大佬, Verticle 到底是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
unbright
V2EX    Java

正在学习 Vertx,请教一下给位大佬, Verticle 到底是什么?

  •  
  •   unbright 2020-12-31 09:41:42 +08:00 3087 次点击
    这是一个创建于 1746 天前的主题,其中的信息可能已经有所发展或是发生改变。

    接触 vertx 没太久,刚看到 Verticle,但是不懂这个到底是什么,官网上也没怎么细说,就说这是一个编程模型,里面是线程安全的啥的其他东西,但是它到底是什么模型,使用场景是什么这些没看到,搜索了一些相关文章,也还是不知道。 各位大佬能否用通俗的语言描述一下这个东西,感激不尽!

    11 条回复    2020-12-31 12:28:03 +08:00
    tabris17
        1
    tabris17  
       2020-12-31 09:47:51 +08:00
    Verticle 的代码同一时间只会被一个线程执行,不会有并发问题。
    Verticle 之间通过 eventbus 或其他方式通信
    unbright
        2
    unbright  
    OP
       2020-12-31 09:54:36 +08:00
    @tabris17 感谢大佬的回复,你说的这个我也知道,可能是我没描述清楚,比如 spring 中 controller 标识的是可以处理 http 请求,service 标识的处理业务逻辑,那 Verticle 这个模型是用来干嘛的,还是说 vertx 的 Verticle 就是一个啥都可以干的服务吗
    sagaxu
        3
    sagaxu  
       2020-12-31 10:02:08 +08:00 via Android
    verticle 就是一个单线程的服务,所有代码在同一个线程内运行,不需要考虑同步和线程安全
    micean
        4
    micean  
       2020-12-31 10:14:58 +08:00
    @unbright

    Verticle 用来承载业务,可以是 configuration, 可以是 controller,也可以是 service
    Verticle 拥有成员变量 vertx,加载时函数 start 与卸载时函数 stop
    Verticle 之间采用 vertx 的 eventbus 通讯

    比如:
    BaseController extends AbstractVerticle{
    // 扫描子类的方法,加入到路由中
    }

    UserController extends BaseController{

    @GetMapping("/user")
    Handler<RoutingContext> findUser(){
    return rctx -> { ... }
    }

    }
    th00000
        5
    th00000  
       2020-12-31 10:18:48 +08:00
    Vertx 跟 Spring 一系列有本质的区别
    Spring 是框架, 而 Vertx 只是一个简单的基础工具集
    不要两者里面的概念进行类比
    verticle 什么脏活累活都可以干, 他是一个单线程的业务逻辑的载体
    启动了一个 verticle 意味着你有一整套业务逻辑可以跑在一个 CPU 上
    如果你有多核 CPU, 你就可以启动多个 verticle
    不要觉得 Vertx 里面随便加个注解就可以跑 http 服务了
    这是不可能的, 因为 Vertx ** 不是框架 **
    sagaxu
        6
    sagaxu  
       2020-12-31 10:20:22 +08:00 via Android
    @th00000 搭上 quarkus 就跟 springboot 一样了
    tabris17
        7
    tabris17  
       2020-12-31 10:33:04 +08:00
    @unbright Verticle 和 Controller 的关系就相当于操作系统和应用程序的关系
    unbright
        8
    unbright  
    OP
       2020-12-31 11:06:04 +08:00
    多谢各位老大的解答,spring 一套用的多了就维持了这个思想,现在差不多理解了,Verticle 相当于是同类业务的集合,如果是不同的业务可以用不同的 Verticle,有点分布式服务的感觉。
    40EaE5uJO3Xt1VVa
        9
    40EaE5uJO3Xt1VVa  
       2020-12-31 11:18:20 +08:00
    verticle 可以理解成 actor
    lancelock
        10
    lancelock  
       2020-12-31 11:25:30 +08:00
    用 quarkus 吧,底层是 Vertx
    Leviathann
        11
    Leviathann  
       2020-12-31 12:28:03 +08:00 via iPhone
    和 actor model 的 actor 有什么区别呢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2715 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 09:55 PVG 17:55 LAX 02:55 JFK 05:55
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86