需求:后端有通知和待辦,及時(shí)推送給前端相關(guān)用戶,在頁(yè)面顯示提示信息。 用到技術(shù): 1、websocket 后端推送最終使用的是websocket 前端用戶登錄后與后端服務(wù)器建立websocket鏈接 2、JFinal-event 異步執(zhí)行消息推送 與主業(yè)務(wù)解耦 不能在新增一條todo待辦或者notice通知后立馬同步執(zhí)行websocket的推送,如果系統(tǒng)里有1000個(gè)客戶端,你得等都推送完了才能結(jié)束這個(gè)業(yè)務(wù)的響應(yīng) 顯然不合理。需要在todo和notice save之后 向事件處理隊(duì)列或者pool里推送一個(gè)事件就立馬結(jié)束這個(gè)業(yè)務(wù),等待事件監(jiān)聽器起作用后異步處理。 save成功立馬post一個(gè)事件。 監(jiān)聽器監(jiān)聽這個(gè)事件 監(jiān)聽到事件后異步執(zhí)行websocket推送就行了 上效果: 如何在項(xiàng)目里引入JFinal-event: 1、pom.xml 版本3.1.3 2、配置插件 3、創(chuàng)建EventListener 寫注解 package cn.jbolt._admin.event; import com.jfinal.log.Log; import cn.jbolt.common.model.SysNotice;import cn.jbolt.common.model.Todo;import net.dreamlu.event.core.EventListener;/** * JBolt 內(nèi)部事件監(jiān)聽處理 * @ClassName: JBoltEventListener * @author: JFinal學(xué)院-小木 QQ:909854136 * @date: 2021年10月6日 */public class JBoltEventListener { private static final Log LOG = Log.getLog(JBoltEventListener.class); /** * 全局通知事件監(jiān)聽處理 * @param notice */ @EventListener(async = true) public void sysNotice(SysNotice notice) { } /** * todo事件監(jiān)聽處理 * @param todo */ @EventListener(async = true) public void todo(Todo todo) { }} 4、找到合適的地方執(zhí)行 EventKit.post(event)就行了 |
|