首页 新闻 赞助 找找看

MQ通信任务管理下发通知如何同步给Control层

0
悬赏园豆:30 [已解决问题] 解决于 2018-01-03 10:13

项目中需要优化任务管理系统,项目由SSM框架搭建,Control层接受到前台请求消息后,由任务管理Service 发送消息到子系统处理,子系统处理完毕后回执消息到任务管理层,任务管理层需要同步信息给Control,反馈到界面。比如浏览查询下载,项目使用了RabbitMQ,集成了Spring上,监听器实现了MessageListener接口,因为Control层调用任务管理发送消息后,需要等待子系统处理返回信息,所以Control层给任务管理Service提供了一个对象,对象中有Flag = false,当任务管理Service监听到消息MessageListener ----void OnMessage函数反应后,Flag 置 为TRUE ,任务管理调用TaskService后发送消息,做了一个死循环校验传递给Service的对象Flag,现在项目提出优化这一部分不用死循环,比如完成后触发操作反馈给页面,请问有什么好的方法。

费斯科的主页 费斯科 | 初学一级 | 园豆:143
提问于:2017-12-26 10:45
< >
分享
最佳答案
1

既然是这种模式肯定任务就不是短时间处理完的;

服务端内部处理既然异步了,那么httpService到客户端也应该异步——如果采取空耗无疑白白浪费大把资源。因此适合的该场景的选择应该用webSocket组件或者自己客户端去轮询任务列表(webSocket当然也有这种封装,还取决于产品设计等因素)。

当然如果你们咸蛋的慌,任务本身执行很短,httpService服务器空耗也能满足负载,那么你选取Controller Waite For TaskFinish 也不是不可以。

收获园豆:30
花飘水流兮 | 专家六级 |园豆:13560 | 2017-12-26 11:10

谢谢你的回复,我是C++刚刚转入JAVA,对webScocket还不是很了解,现在只会使用SSM框架这种结构,还有点不明白的地方,消息通过Control层请求发起,开启一个线程,Control层调用Servcie层处理后反馈信息到Control后,该线程结束,使用webSocket的话,意思是可以在请求发起后在Control层使用任务管理的Service层发送消息后就直接结束,然后在任务管理的service 使用OnMessage函数监听到消息后可以直接发送到前端吗?会不会存在多个用户访问,该反馈给A的信息反馈到B呢?希望得到您的解答。

费斯科 | 园豆:143 (初学一级) | 2017-12-27 10:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册