项目中需要优化任务管理系统,项目由SSM框架搭建,Control层接受到前台请求消息后,由任务管理Service 发送消息到子系统处理,子系统处理完毕后回执消息到任务管理层,任务管理层需要同步信息给Control,反馈到界面。比如浏览查询下载,项目使用了RabbitMQ,集成了Spring上,监听器实现了MessageListener接口,因为Control层调用任务管理发送消息后,需要等待子系统处理返回信息,所以Control层给任务管理Service提供了一个对象,对象中有Flag = false,当任务管理Service监听到消息MessageListener ----void OnMessage函数反应后,Flag 置 为TRUE ,任务管理调用TaskService后发送消息,做了一个死循环校验传递给Service的对象Flag,现在项目提出优化这一部分不用死循环,比如完成后触发操作反馈给页面,请问有什么好的方法。
既然是这种模式肯定任务就不是短时间处理完的;
服务端内部处理既然异步了,那么httpService到客户端也应该异步——如果采取空耗无疑白白浪费大把资源。因此适合的该场景的选择应该用webSocket组件或者自己客户端去轮询任务列表(webSocket当然也有这种封装,还取决于产品设计等因素)。
当然如果你们咸蛋的慌,任务本身执行很短,httpService服务器空耗也能满足负载,那么你选取Controller Waite For TaskFinish 也不是不可以。
谢谢你的回复,我是C++刚刚转入JAVA,对webScocket还不是很了解,现在只会使用SSM框架这种结构,还有点不明白的地方,消息通过Control层请求发起,开启一个线程,Control层调用Servcie层处理后反馈信息到Control后,该线程结束,使用webSocket的话,意思是可以在请求发起后在Control层使用任务管理的Service层发送消息后就直接结束,然后在任务管理的service 使用OnMessage函数监听到消息后可以直接发送到前端吗?会不会存在多个用户访问,该反馈给A的信息反馈到B呢?希望得到您的解答。