java事件触发

工作遇到一个问题:用netty实现服务和设备的交互,服务发送了一组指令,需要再等待时间内获取结果,如果结果提前全部返回,就进一步处理,如果等待时间内没有全部返回,就视为失败处理。

这个场景我遇到的困难主要就是将netty的异步处理转为同步,

目前我的做法是在写出到channel之后,使用CountDownLatch(1)等待响应,latch.wait(等待时长)来做同步等待,

所有的请求有一个唯一的uuid,有一个map存储uuid和latch,nettyserver接收到消息之后,找出对应的请求的uuid,get到latch,countdown,请求的进程继续往下运行。

 

netty异步,所以在接收到消息之后,我想用事件或者观察者模式,通知所有正在等待的请求,有一个响应到了,比对是否是自己等待的请求,

写代码的时候用的是事件触发模式,相当于单观察者

本来想改成观察者,发现不合适模式,其他的消息应该其他处理,不能new成其他的观察者,因为nettyserver收的消息是巨大的,如果每个消息都遍历所有的观察者,消耗太大

消息到来,分好种类,单对单的模式比较好,如果要抽象,这些不同的种类事件抽象集成会比较好

 

两种模式的代码的demo后期补上git地址

posted @ 2018-10-19 16:50  heroinss  阅读(2109)  评论(0编辑  收藏  举报