vertx verticle
以下内容为随手记的,若看客不知鄙人所云,还请原谅则个..............
公司用的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的更多相关文章
- vertx模块DeploymentManager部署管理器
DeploymentManager public DeploymentManager(VertxInternal vertx) { this.vertx = vertx; loadVerticleFa ...
- Vertx Future 异常处理
Vertx Future 异常处理 异常发生 在使用Vertx进行开发的时候,必不可免使用Future异步编程框架.通过Future的 compose ,可以轻松实现不同异步任务的组合. 但是 ...
- 使用Vertx重构系统小结
背景 前几个月,使用Vertx重构了公司的一个子系统,该系统负责公司核心数据subscriber的采集.处理.存储和搜索.这里介绍下重构该系统时的一些关键点. 架构 重构前系统部署图: 重构前系统主要 ...
- 使用Vertx构建微服务
Vertx Vert.x is a tool-kit for building reactive applications on the JVM.(Vertx是运行在JVM上用来构建reactive ...
- vertx的Actor模型实现
前言 note: Context 与 EventLoop 关系 : N ; 每次创建一个vericles或者multi instances 通过EventLoopGroup.next挑出一个Event ...
- vertx的NetServer模块
启动 public synchronized void listen(Handler<NetSocket> handler, SocketAddress socketAddress, Ha ...
- vertx的HttpServer模块
Start HttpServer /** * 启动 HttpServer * multi instances 采用 synchronized防止线程安全问题 * addHandlers 方法是acto ...
- vertx模块HAManager高可用
HAManager public HAManager(VertxInternal vertx, DeploymentManager deploymentManager, ClusterManager ...
- Vertx.vertx()初始框图和模块
Vertx.vertx()实例 一.构造方法 1. VertxImpl构造方法 选择 transports protocol , default select 模型 if (options.getPr ...
随机推荐
- Linux标准输入输出
linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2 以后打开文件后.新增文 ...
- HDU 1848 Fibonacci again and again【SG函数】
对于Nim博弈,任何奇异局势(a,b,c)都有a^b^c=0. 延伸: 任何奇异局势(a1, a2,… an)都满足 a1^a2^…^an=0 首先定义mex(minimal excludant)运算 ...
- POJ2794 Double Patience[离散概率 状压DP]
Double Patience Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 694 Accepted: 368 Cas ...
- U3D-页游-检测机制-webplayer-调试方法
前言 页游目前有两个客户端入口: 网页端 (unity webplayer) 游戏微端 (unity standalone) 关于微端的技术,可参考我之前的文章: dotNet开发游戏微端 游戏微端的 ...
- 大牛的博客 osharp以及EF的分析
http://www.cnblogs.com/guomingfeng/ http://developer.51cto.com/art/201309/409950_all.htm
- git没有changId解决方法
1.git branch work(从最新节点建立分支,相当于将自己的修改备份到新的分支) 2.git reset --hard HEAD~10(强制回滚多个节点) 3.git status 如果显示 ...
- 使用getopt_long来解析参数的小函数模板
getopt_long原型 #define no_argument 0 #define required_argument 1 #define optional_argument 2 struct o ...
- redis 学习笔记(1)-编译、启动、停止
一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先到这里下载Stable稳定版,目前最新版本是2.8 ...
- CSS代码实例:用CSS代码写出的各种形状图形
一共收集整理了图形20个,比较实用,同时也为了熟悉CSS的代码.整合了一下,有错误欢迎指出. 1.正方形 #square { width: 100px; height: 100px; backgrou ...
- jQuery+css3 弹幕
写了个基于jQuery+css3的弹幕功能,此功能面向手机wap,利用改变位移做弹幕功能会使一些性能低的手机浏览器卡,所以用了css3,此功能不支持非webkit内核浏览器 html部分 自己设置样式 ...