項目名稱:後勤保障指揮系統
項目部署環境:銀河麒麟系統+myEclipse+mySql5.6+tomcat7+rabbitmq+基於ssm的公司框架+sip協議
啓動方式:mysql
啓功sip服務器:cd /home/wisdom/build_mpms/bin,./start.sh腳本一鍵全啓,第一次開啓須要chmod +x +腳本/文件名稱 進行受權。 須要對cd /home/wisdom/build_mpms/bin路徑中的配置文件進行配置,將全部.ini 文件中的ip地址改爲你要鏈接的服務器的地址,注意解除級聯時的count=0. 打開sc.log日誌:tail -f /tmp/sc.log打開日誌,裏面有註冊的信息(綠色字體)。 啓動rabbitmq: cd /usr/local/rabbitmq-3.5.2/sbin,運行./rabbitmq-server -detached ps -ef|grep rabbitmq 觀察是否有rabbitmq進程。 啓動mysql:cd /usr/local/mysql/bin,當前路徑下運行./mysqld_safe &文件,符號表明後臺運行。 啓動服務:cd /usr/local/JavaApp/wd_msg_center/ 運行./run.sh debug cd /usr/local/JavaApp/wd_mw_dal (data-access). ./run.sh debug cd /usr/local/JavaApp/wd_svc_resource (source-dir) ./run.sh debug cd /usr/local/JavaApp/wd_svc_authz (auth-service) ./run.sh debug cd /usr/local/JavaApp/wd_svc_session (session-manager) ./run.sh debug cd /usr/local/JavaApp/wd_agent_sip (sip-agent) ./run.sh debug cd /usr/local/tomcat/bin 當前路徑下運行./catalina.sh run 這段是調試時使用,真正部署時後臺啓動就能夠了。
進入網址,http:// +ip地址 若是tomcat啓動成功,能夠看到登錄界面,更改服務資源與當前服務節點(與你鏈接的服務器ip保持一致)
若是一切順利,安裝技保終端,安裝vs2015補丁就能夠登錄了,(windows10安裝補丁有錯誤,害我從新裝的系統)
注意銀河麒麟橋接模式,須要用戶與服務器都要在同一個ip頻段才能去鏈接。
我負責的是系統中的指揮業務模塊,包括指揮組管理,指揮呼叫,臨時添加非指揮組成員(在指揮過程當中,下同),強退指揮組成員,指揮提醒,暫停指揮,專向指揮,協同指揮,受權指揮,接替指揮,越級指揮,臨時指揮,呼叫組外人員,設置組播,調閱視頻等等。
說說我我的以爲的技術難點以及「坑」:首先的難點在於對業務流程的理解,好比接替指揮,受權指揮,由於指揮組的成員結構是我緩存中的數據,所以在業務發起後的成員結構是怎樣的構成須要慢慢理解(文檔上的用語太書面,理解時半猜半懂的,須要及時的溝通)。
在理解業務後,編寫的過程當中要隨時考慮系統的狀態,以及你的緩存變化,還有接收通知或發送通知後的變化,任何的變化都有多是你模塊中的bug,若是你沒有考慮的話。例如強退成員時,咱們是將這個成員的某個狀態字段更改,而不是直接將這個成員從這個緩存中刪除,所以,在中止指揮時,咱們要恢復原來的成員結構,被強退的成員須要在他的用戶列表中看到原來的他所在的指揮組,這時在判斷時(我須要與數據庫中的原表比較,判斷這個成員是增長的仍是減小的)須要判斷成員的狀態,若是狀態是剔除狀態,要從新把他放入一個集合中,經過處理判斷當前用戶是不是原指揮組成員,是的就要在當前用戶列表中顯示這個組,不是就要刪除這個組信息。程序員
1、 for(SimpleUser simpleUser:members){ //表示刪除的成員狀態 if(!"2".equals(simpleUser.getBizStatus())){ simpleIdList.add(simpleUser.getId()); } 2、 //求差集,這不重要 changedIdList.addAll(memberIdsByData); changedIdList.retainAll(simpleIdList); memberIdsByData.removeAll(changedIdList); if(memberIdsByData.size() != 0){ for(String memberId:memberIdsByData){ //在緩存中添加組信息 addGroupCache(memberId, groupWithMembers); } } simpleIdList.removeAll(changedIdList); if(simpleIdList.size() != 0){ for(String memberId:simpleIdList){ //刪除這個緩存中的這個組信息 deleteGroupCache(memberId, directGroup.getId()); } }
還有緩存的維護雖然沒什麼難點,可是邏輯要清晰,細節很重要,不然有的bug真的欲仙欲死,debug時那叫一個酸爽......
有一個坑我印象很深入,由於那天第三方測試,忙了一宿,系統的服務都已部署在生產環境中,你們都很緊張,恰恰個人業務(就是那個強退成員)沒法實現,報了異常(json轉換異常,很奇怪)但是咱們自測時在本地運行時業務是沒有問題的,我又加了一晚上的班(悲催),找到緣由,因爲以前的一個接口沒有用上,但考慮之後擴展,就一直沒有註釋掉,恰恰它的uri地址與強退成員接口的uri如出一轍,致使在生產環境中根本沒有掃描到個人強退成員接口,報異常也就不奇怪了。在我註釋掉那個擴展接口後,系統正常。
再說說這個項目的動態信息同步以及靜態信息同步策略,先說動態信息同步,動態信息同步採用訂閱-發佈級聯模型實現,在SIP標準規範上,PUBLISH和SUBSCRIBE/NOTIFY爲兩種不一樣的事務,在動態信息同步中必須依據訂閱-發佈級聯模型的時序圖實現,需先SUBSCRIBE訂閱,後續才使用PUBLISH事務。在此項目中,第一次訂閱的節點需全量同步(NOTIFY和PUBLISH均全量),後續均增量同步(NOTIFY和PUBLISH均增量)。靜態信息同步(路由信息同步)使用LDAP,即靜態信息管理(LDAP)中節點信息可實現路由信息同步,生成全局路由表且支持更新。
總之,這個項目比較大,我仍是很慶幸能有這樣的機會去參加這樣的項目,這個項目技術不算新,可是很考驗我的的基礎知識以及對細節的把握,同時與衆多不一樣領域的程序員對接程序讓我對整個系統有了全面的瞭解,糾正了不少以前的不規範的編程習慣,先寫這麼多,有補充還會繼續更新。sql