V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yizmaoaa
V2EX  ›  Java

今年看到讨论 Vert.x 的比较多。所以来聊聊 Vert.x

  •  4
     
  •   yizmaoaa · 2020-05-21 11:55:59 +08:00 · 11114 次点击
    这是一个创建于 1680 天前的主题,其中的信息可能已经有所发展或是发生改变。

    正好由于我找不到工作,已经转行做外卖小哥,所以有时间来聊一聊

    1:关于 SpringWebFlux 与 Vert.x 究竟要选那一个?

    对于这两个之间要选那一个其实很简单,如果你要性能要吞吐量那么我建议 Vert.x

    对于普通并发量不高,业务比较复杂的情况我建议你用 SpringBoot 。因为 WebFlux 目前在 techempower 上的性能测试并不出众,引入了复杂度但是吞吐量并没有显著的提升。这是得不偿失的。

    2:使用 Vert.x 话要使用那个版本?

    如果是为以后的技术选型做考虑目前不着急的话,建议等待 4.0 发布后直接上。因为变动还是比较大的。

    而且相比于 3.8/3.9 API 变化是一部分,还有就是 4.0 会新添加很多让代码量减少的东西。

    如果现在的项目要上的话,有能力的也可以使用 4.0 的里程碑版。因为有认识的人已经将这个版本使用在生产环境了

    为稳重考虑的话也建议使用 3.8.5 以上的版本,如果使用 Kt 的话也挺舒服的。

    3:担心 Vert.x 靠不靠谱的问题?

    相比于 Spring 来说,Vert.x 在这个方面肯定是不如 Spring 的。

    Vert.x 的主要开发人员是红帽的,开发人员基本 Base 在法国

    Vert.x 项目有 3 个是直接归属于 Eclipse 基金会旗下的。仓库组织就在 eclipse-vertx 这个组织下

    其他的一些文档,以及各种 Client 等等都在 vertx-x3 下。属于社区项目

    Vert.x 的社区活跃度也还可以,Github 、Gitter 、Twitter 、国内 QQ 群。而且国内有不少贡献过 Vert.x 的

    所以这方面可以放心,至少你出了问题是有人管的。

    不过 Vert.x 在国内使用的公司不多。关于 Vert.x 的资料等等也是比较少的。还有就是招聘问题,可能比较难找到对 Vert.x 很熟悉的。

    4:关于 Vert.x 的异步代码问题

    在 Vert.x 里面处理异步代码目前有 4 个解决方案,CallBack 、Future/Promise 、Rxjava 、Kotlin 的协程

    在 4.0 以前,代码默认都是 CallBack 的,自己针对每个 API 去封装 Future 代码量也会变多。所以 Rxjava 与 Kotlin 是一个不错的选择。

    4.0 后所有的异步 API 都原生支持返回 Future,所以如果用 Java 那么 Future 就是第一选择了。

    5:关于多语言

    Vert.x 的多语言其实是依赖自身的一个 CodeGen 库生成的,这点在 Graalvm 后会有所改变。例如衍生的项目 ES4X

    6:关于 Vertx 的生态

    其实在异步生态里面,Vert.x 算目前 Java 里最好的了,所有第三方的 Client,Vert.x 都自身根据协议开发了自己的 Client,但是需要注意的是,由于人手啊等等问题,Vert.x 所提供的库都是很基础的。例如操作数据库的基本和原生 JDBC 写法差不多。。

    所以为了好用,你不得不自己去在这些基础库上进一步的开发。

    不过前两天看到 Hibernate 的仓库也写了一个基于 Vert.x 的异步库。相信后面开发会越来越方便的

    7:如何对 Vert.x 贡献

    这个其实和其他项目一样,等 4.0 发布之后可以参与翻译官方的文档啊之类的。

    对于目前仓库的一些 ISSUES,你也可以在问题区参与讨论后 Fork 仓库进行代码提交,当然测试用例是必须的。

    另外对于 Eclipse-Vert.x 下的项目,因为属于 Eclipse 基金会,所以你提交代码后需要签署一下 Eclipse 的一个协议。对于 Vert.x-X3 下的项目则不用。。

    就先想到这里了.........

    第一次在 V2 发技术帖,大佬们轻喷。

    第 1 条附言  ·  2020-05-21 15:18:30 +08:00
    顺便提一下外卖的事情,赚的不多。没有在魔都普通程序员赚的多。

    就是时间自由点。
    第 2 条附言  ·  2020-05-22 04:20:07 +08:00
    再来说一个 Hibernate-Reactive 这个库,目前发现他们的开发者与 Vert.x-SQL-Client 的之间的沟通还是挺多的

    希望越来越好
    38 条回复    2021-03-22 21:25:57 +08:00
    yizmaoaa
        1
    yizmaoaa  
    OP
       2020-05-21 12:32:08 +08:00
    - -没人看啊我擦
    dcoder
        2
    dcoder  
       2020-05-21 12:41:18 +08:00
    因为没人用 Vert.x 啊
    presoul
        3
    presoul  
       2020-05-21 12:41:36 +08:00 via Android
    外卖小哥 这不是钓鱼吗🐶
    sagaxu
        4
    sagaxu  
       2020-05-21 12:43:49 +08:00 via Android
    Vertx 现在还是非常小众的,我问过好多做过 Java 开发的,大都表示没听说过。

    4.0 用于生产环境我是不建议的,尤其是刚开始熟悉的人,出了问题很难界定是用的不对还是框架 bug,还是从 3.9.1 开始吧。

    我从 3.4 一直用到 3.9,几乎每个版本必更,一个遇到过两个 bug,一个是 CPU 使用率暴增的,另一个是 redis client 线程安全问题,第一个问题很快修复了,第二个严格按照一个 client 一个 vertcle 使用不会触发。
    voidxx
        5
    voidxx  
       2020-05-21 13:07:46 +08:00
    昨天那个帖子第一次听说这东西
    lhx2008
        6
    lhx2008  
       2020-05-21 13:11:59 +08:00
    生产环境还是没什么人敢上的,如果要性能直接换 Go 还更可控一点。
    zpf124
        7
    zpf124  
       2020-05-21 13:14:24 +08:00
    因为懂得真不多,网上各类文档教材也都是做个小 demo,能从请求到数据库再渲染出页面来就算完了。
    从没见过几个真正的完整实现了一个基本网站的小项目。
    所以只敢看个热闹,不知道该怎么用这玩意做一个和平时随手搭的 spring 项目功能一致完整项目。
    PDX
        8
    PDX  
       2020-05-21 13:26:56 +08:00
    vert.x 真的是个好东西,希望能火起来

    spring 那套太笨重了
    chendy
        9
    chendy  
       2020-05-21 13:35:48 +08:00   ❤️ 1
    都是好东西,可是有这类需求还不如直接换语言
    或者啥时候 java 本身也能用同步语法写异步了再说吧…
    ZSeptember
        10
    ZSeptember  
       2020-05-21 13:48:56 +08:00
    没必要用。
    生产力重要
    passerbytiny
        11
    passerbytiny  
       2020-05-21 14:05:15 +08:00 via Android
    我怀疑楼主本质在打广告,但是我不在意,因为我把整个反应式 web 接口都打进了“以后再说”的冷宫。
    janus77
        12
    janus77  
       2020-05-21 14:07:52 +08:00
    所以做外卖是什么体验?赚的多吗
    yizmaoaa
        13
    yizmaoaa  
    OP
       2020-05-21 14:43:00 +08:00
    @janus77 不多。几千块钱
    yizmaoaa
        14
    yizmaoaa  
    OP
       2020-05-21 14:46:13 +08:00
    @presoul 没钓鱼,因为我真是在送外卖。
    yizmaoaa
        15
    yizmaoaa  
    OP
       2020-05-21 14:49:17 +08:00
    @sagaxu 我在上面也提出了,如果自身实力不允许,还是不要使用 4.0 。我也遇到几个 Bug,提 PR 修复掉了。

    共享 Client 出问题,是 4.0 之前的 Client 和 Verticle 是不一定在同一个 Context 时会出现的。
    abcbuzhiming
        16
    abcbuzhiming  
       2020-05-21 15:37:50 +08:00
    @PDX 我曾经也觉得 spring 太笨重了,想把 spring 换掉,然后我就发现,spring 最大的优势就是它涉及的东西太广了,你要换就要换整个生态圈,vert.x 在这方面还是远远不够
    vxinv
        17
    vxinv  
       2020-05-21 15:38:36 +08:00
    我去 大佬 送外卖 能带上我吗
    ideacco
        18
    ideacco  
       2020-05-21 15:44:37 +08:00
    某日正愁找不到 bug,结果卤煮送外卖经过,悠悠的说了一句:你上面的 CallBack 没有正确传值…………然后深藏功与名
    rockyou12
        19
    rockyou12  
       2020-05-21 15:45:49 +08:00
    在使用 vertx 的 mqtt client 与 emq 通信,使用还是好用,但确实看得出生态还是缺位的,连自动重连这种基础功能都没有封装……
    yizmaoaa
        20
    yizmaoaa  
    OP
       2020-05-21 15:53:11 +08:00
    @rockyou12 确实。。人手不够是一个原因,毕竟官网那么多子项目都是这几个人在搞。以前 Redis 都没有自动重连这种。后面才加上的。估计其他 Client 后面也会提上日程的。。现在就是所有东西最基础的有了。但是都功能上不是很完备
    BBCCBB
        21
    BBCCBB  
       2020-05-21 16:06:56 +08:00
    等 java 协程是最香的
    sagaxu
        22
    sagaxu  
       2020-05-21 16:16:47 +08:00 via Android
    @rockyou12 redis client 自动重连也是 3.9 才有,不过文档里一直都有自动重连的例子。这应该是产品理念的问题,不够接地气。
    cheng6563
        23
    cheng6563  
       2020-05-21 16:18:45 +08:00 via Android
    没携程都是写得很蛋疼的
    sagaxu
        24
    sagaxu  
       2020-05-21 17:21:43 +08:00 via Android
    @lhx2008 国内用的是不多,但也不至于不可控,毕竟只是 netty 加个皮,netty 还是相当普及的
    NoKey
        25
    NoKey  
       2020-05-21 17:29:44 +08:00
    有技术的外卖小哥 👍
    mango88
        26
    mango88  
       2020-05-21 17:41:07 +08:00
    3.2 的时候上的车, 后面经历了 future 变成 promise
    再后来折腾起 quarkus
    lancelock
        27
    lancelock  
       2020-05-21 17:45:38 +08:00
    资料太少了,没有参考,不知道怎么组织代码结构比较好
    wowawesome
        28
    wowawesome  
       2020-05-21 23:10:50 +08:00
    送外卖一天你大概能赚多少
    yizmaoaa
        29
    yizmaoaa  
    OP
       2020-05-22 04:14:28 +08:00
    @wowawesome 200 多
    yizmaoaa
        30
    yizmaoaa  
    OP
       2020-05-22 04:15:50 +08:00
    @lancelock 代码结构比较自由,这个看个人.....
    yizmaoaa
        31
    yizmaoaa  
    OP
       2020-05-22 04:16:04 +08:00
    @NoKey 见笑了。。
    yizmaoaa
        32
    yizmaoaa  
    OP
       2020-05-22 04:16:37 +08:00
    @moneyloveme8866 别开玩笑了,好好写代码。跑外卖赚不到多少钱
    cloudopt
        33
    cloudopt  
       2020-05-22 14:49:18 +08:00
    推荐 Cloudopt Next: https://github.com/cloudoptlab/cloudopt-next

    Cloudopt Next 底层是基于 Vertx 的,做了大量的封装,有效的降低了使用成本以及配备了大量平常会使用的插件,帮助后端开发者快速上手、快速开发。


    Cloudopt Next 是基于 Kotlin 、Vertx 的一个面向下一代的极其轻量级的微服务框架,您可以处理 Url 的解析,数据的封装,Json 的输出等等,从根本上减少开发时间、提升开发体验。Cloudopt Next 吸收了 Spring Boot 、JFinal 、Resty 、Vertx 等优秀项目的思想,不仅拥有非常好的开发体验还拥有着极低的学习曲线。

    ** Cloudopt Next 主要拥有以下特点:**

    简单 极简设计,几乎不要任何配置,不依赖 Tomcat 、Jetty 等 Web 容器。

    异步 基于 vertx 轻松实现高性能的异步服务。

    扩展 支持 vertx 体系的各种组件,同时支持通过插件扩展功能,官方也提供了大量好用的插件。

    中文 全中文文档、中文社区,帮助中文开发者快速上手。
    HolmLoh
        34
    HolmLoh  
       2020-05-22 15:43:29 +08:00
    刚好最近在尝试,你说的 vertx 的第三方 client 不完善的问题确实非常严重..
    rabbitMQ 的 Client 更是一穷二白,ConfirmListener 都没得添加。虽然在 issues 里面已经看到有人提到,但只是处于“在做了”的进度...
    路漫漫其修远兮,希望越来越好把
    ZiLong
        35
    ZiLong  
       2020-05-26 22:47:14 +08:00
    不如外卖小哥系列。。。
    yizmaoaa
        36
    yizmaoaa  
    OP
       2020-05-27 09:20:01 +08:00
    @ZiLong 想想我找不到工作,去送外卖 你就知道我不如你
    byte10
        37
    byte10  
       2021-02-21 17:29:53 +08:00
    @rockyou12 现在有了吗,最近也搞 mtqq
    byte10
        38
    byte10  
       2021-03-22 21:25:57 +08:00
    @byte10 有的,不知道质量如何
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1056 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:28 · PVG 03:28 · LAX 11:28 · JFK 14:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.