調度工具taskctl雖然支持分散式調度,但是有的時候,不同重要程度的調度服務還是要區分開來,在區分開後,不同調度服務之間怎麼實現依賴啦, 其實有很多方式,比如寫文件,寫資料庫之類的,這些都可以根據用戶自己的設計來實現,但其實taskctl自帶的消息發送組件也是可以做到的,只是大家沒發現(已經向官方 ...
調度工具taskctl雖然支持分散式調度,但是有的時候,不同重要程度的調度服務還是要區分開來,在區分開後,不同調度服務之間怎麼實現依賴啦,
其實有很多方式,比如寫文件,寫資料庫之類的,這些都可以根據用戶自己的設計來實現,但其實taskctl自帶的消息發送組件也是可以做到的,只是大家沒發現(已經向官方求證和親測過了)
下麵就把這個比較強大的功能跨調度服務依賴分享給大家:
我這裡說的是跨調度伺服器依賴,不是同一調度服務的同一流程中的用Lean屬性;也不是同一調度服務的不同流程,用事件發送節點和事件接收節點來做;而且調度伺服器B上的某一作業b_work1依賴於調度伺服器A上的某一個作業a_worke作業。
其實原理和跨流程依賴類似,只是跨服務依賴時,原先的事件發送節點不能用了,但是taskctl其實提供了ctlsendevent這個可執行程式,用來向核心發送事件命令。首先在調度伺服器A的a_worke作業後面添加一個exe作業,程式名稱就是ctlsendevent,參數分別是目標IP 埠 用戶名 用戶密碼 事件,如下所示
<exe> <name>sendevent</name> <progname>ctlsendevent</progname> <para>$(server_ip) $(server_port) $(user) $(passwd) $(enentbufflow)</para> </exe> |
而在B調度伺服器的b_work1作業前,按正常的添加一個事件接受節點,接受的消息和發送的消息一致即可。如下
<recvevent> <name>job1</name> <para>$(enentbufflow)</para> </recvevent> |
如上配置好後就可以實現跨調度服務依賴了。
我測試過,這個 ctlsendevent 程式是一個可以獨立運行的程式,不依賴於是否安裝了taskctl,那意味著大家拿去的可玩空間很大,比如像封裝在web服務中,點擊頁面上的某個按鈕就可以觸發web服務去執行這個程式,發送相應的消息,web的驗證體系由web服務做,但是web服務又和調度服務分開,充分的完成了很多安全需求。