以下内容为随手记的,若看客不知鄙人所云,还请原谅则个..............

公司用的vertx,在国内,这还是款比较年轻的框架,你也可以把他当做一个工具,官网上的说法是:

Vert.x is a tool-kit for building reactiveapplications on the JVM.

公司一直用的标准的verticle,因为并没有什么长任务或阻塞任务的接口,所以一直没有使用worker verticle的强烈需求,即使后来简单重构,也只是用注解和反射外加封装,精简了项目的代码量,私以为,没有worker verticle的vertx能称为vertx吗·········

今天试了试worker verticle,遇见了一些小坑,来篇随笔,纪念一下:

我在老大给的demo里面将所有的标准的verticle替换成 worker verticle,然后故意阻塞一个verticle1里的方法,调用另一个verticle2的某个方法,或者调用阻塞的verticle1的某个方法,总是阻塞,无法成功调用,找了半天才发现,老大给的demo的里的数据库连接数就给了如下:

<property name="initialSize" value="1"/>
<property name="minIdle" value="1"/>
<property name="maxActive" value="2"/>
我不停的调用接口,所以连接数不够,发现原因的我眼泪留下来,我擦泪············· 增加连接数后,果然接口能调通了,瞬间喜大普奔,
but!!!!!!!!!!
当被阻塞的方法处于阻塞状态时,此时再次调用该方法,也是处于阻塞等待状态,必须等待前一次调用的阻塞的方法结束后才能执行,
有点绕口,容我重新组织一下语言,
该方法中有如下判断:
if(i==1){
Thread.sleep(100000);
}
第一次调该方法时,i=1;第二次调用该方法时,i=2;所以第一次被阻塞,第二次不阻塞;
第二次调用 仍然 会等待 第一次 执行完成后,才会执行第二次调用。 查看文档,研究半天,发现:
worker verticles不会并行的执行Handler.而是阻塞式的,等待上一个Handler处理完了,才会再执行后面的请求!
这怎么可以,我可是一个想让所有verticle的每个方法都可以并行执行的伟大的man,
so!
我发现了个神奇的api:
<T> void executeBlocking(Handler<Future<T>> blockingCodeHandler, boolean ordered, Handler<AsyncResult<T>> resultHandler);
这个api的参数:ordered可以指定worker verticles是顺序执行还是并发执行。 使用之后发现,
改方法第一次被阻塞,第二次调用没有被阻塞(在第一次调用仍处于阻塞状态时);

终于,问题解决了,瞬间神清气爽,
啦啦德玛西亚! 以上
(公司产品代码,不好公开,看客见谅)

vertx verticle的更多相关文章

  1. vertx模块DeploymentManager部署管理器

    DeploymentManager public DeploymentManager(VertxInternal vertx) { this.vertx = vertx; loadVerticleFa ...

  2. Vertx Future 异常处理

    Vertx Future 异常处理 异常发生 ​ 在使用Vertx进行开发的时候,必不可免使用Future异步编程框架.通过Future的 compose ,可以轻松实现不同异步任务的组合. ​ 但是 ...

  3. 使用Vertx重构系统小结

    背景 前几个月,使用Vertx重构了公司的一个子系统,该系统负责公司核心数据subscriber的采集.处理.存储和搜索.这里介绍下重构该系统时的一些关键点. 架构 重构前系统部署图: 重构前系统主要 ...

  4. 使用Vertx构建微服务

    Vertx Vert.x is a tool-kit for building reactive applications on the JVM.(Vertx是运行在JVM上用来构建reactive ...

  5. vertx的Actor模型实现

    前言 note: Context 与 EventLoop 关系 : N ; 每次创建一个vericles或者multi instances 通过EventLoopGroup.next挑出一个Event ...

  6. vertx的NetServer模块

    启动 public synchronized void listen(Handler<NetSocket> handler, SocketAddress socketAddress, Ha ...

  7. vertx的HttpServer模块

    Start HttpServer /** * 启动 HttpServer * multi instances 采用 synchronized防止线程安全问题 * addHandlers 方法是acto ...

  8. vertx模块HAManager高可用

    HAManager public HAManager(VertxInternal vertx, DeploymentManager deploymentManager, ClusterManager ...

  9. Vertx.vertx()初始框图和模块

    Vertx.vertx()实例 一.构造方法 1. VertxImpl构造方法 选择 transports protocol , default select 模型 if (options.getPr ...

随机推荐

  1. [diango]理解django视图工作原理

    前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...

  2. 洛谷P1330封锁阳光大学[二分图染色]

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  3. java线程池(newSingleThreadExecutor())小应用

    创建单个线程,用来操作一个无界的队列任务,不会使用额外的线程.如果线程崩溃会重新创建一个,直到任务完成. 代码: import java.util.concurrent.ExecutorService ...

  4. Java程序设计之正则表达式

    正则表达式平时在用到字符串处理的时候是比较常用的,个人觉得不需要刻意的去理解,用的话把文档拿出来查一下就好了,下面给个链接 http://www.php100.com/manual/Javascrip ...

  5. Java程序设计之合租房synchronized(二)

    一号和二号合租一间房,里面共用一个卫生间对象,这是要用到synchronized关键字,一号与二号同时使用卫生间时,一个需要wait()等待被唤醒,另外一个使用完之后卫生间对象被释放,这时候刚刚使用的 ...

  6. Django博客功能实现—文章评论的显示

    功能:在打开文章之后,能在文章下面是显示文章的评论,有父级评论.思路:在文章详情的视图里面,获取这个文章的全部评论,得到显示列表,然后用模板显示出来.步骤:一,在views.py的文章详情中获取评论: ...

  7. jmeter(三)Sample之SOAP/XML-RPC Request

    项目背景:公司的微信端H5界面新开发了会员注册功能,需要对其进行压力测试 项目目标:需要承受每分钟最少6000的压力 一.建立一个测试计划(test plan) 之前有说过,jmeter打开后会自动生 ...

  8. ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址

    原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...

  9. Threejs 物体闪烁

    摸索经验告诉我,对物体的材料关闭深度检测有奇效. 即: depthTest: false 有同类问题的童鞋可以试试.

  10. ZigZag Conversion leetcode java

    题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...