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

公司用的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. 常用Linux命令记录

    [RSYNC] 指定SSH端口从远程服务器同步文件至本地目录 rsync -avH --progress '-e ssh -p 3600' user@remote_ip:remote_dir  loc ...

  2. bzoj[3238][ahoi差异]

    Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sample Output HINT 2<=N<=5 ...

  3. Oracle 中的分析函数

    Oracle常用分析函数介绍(排名函数+窗口函数) 2014年11月30日 ⁄ 数据库 ⁄ 共 3903字 ⁄ 暂无评论 ⁄ 阅读 7,772 次 评级函数 常见评级函数如下: RANK():返回数据 ...

  4. JS数组去重比较

    数组去重复是一个常见的需求,我们暂时考虑同类型的数组去重复.主要是理清思路和考虑执行性能. for循环删除后面重复的 var uniqueFor = function(arr) { for (var ...

  5. OrchardNoCMS实体关系映射扩展

    在OrchardNoCMS中,默认的系统会把实体关系映射保存到mappings.bin文件中. 如果不进行任何修改,默认的可以自动保存关系映射的model是有很大限制的. 条件是model的命名空间必 ...

  6. linux源代码安装程序

    下载源代码之后 tar zxvf file.tar.gz      解压源代码压缩包 ./configure --prefix=/opt/haha/  安装到这个路径 make  编译 sudo ma ...

  7. 反序列化问题的研究之java篇

    博客园很早就开通了,当时下决心要把自己的经验心得记录上去,但是却没有做到,因为一直觉得自己搞得东西可能还是比较的初级,感觉拿不出手,所以也就是只是把它记录在在印象笔记上面(三年下来,还是整理和收藏了一 ...

  8. Spinner

    资源的方式添加 安卓中的下拉框 Spinner可以通过xml string中配置 <string-array name="spingarr"> <item> ...

  9. RFID-RC522、FM1702SL、M1卡初探

    catalogue . 引言 . RC522芯片(读卡器)简介 . FM1702SL芯片(读卡器)简介 . RFID M1卡简介 . 读取ID/序列号(arduino uno.MFRC522芯片 Ba ...

  10. Java 虚拟机

    Java 虚拟机工作原理详解 一.类加载器 首先来看一下 java 程序的执行过程. 从这个框图很容易大体上了解 java 程序工作原理.首先,你写好 java 代码,保存到硬盘当中.然后你在命令行中 ...