目錄
1.啟動多台 soul-admin
2.啟動多台 soul-bootstrap
3.啟動多台業務系統
4.驗證同步
4.1 負載均衡
4.2 資料同步
1.啟動多台 soul-admin
修改配置檔案,把可以開啟允許并行執行的複選框。
application.yml
server: port: 9095 server: port: 9096

啟動後狀态:
2.啟動多台 soul-bootstrap
跟上面的一樣,修改配置檔案,打開并行執行的開關。
application-local.yml
server:
port: 9195
server:
port: 9196
使用預設的同步資料政策 websocket,需要配置多個 soul-admin 的位址:
sync: websocket : urls: ws://localhost:9095/websocket,ws://localhost:9096/websocket
啟動後狀态:
3.啟動多台業務系統
我們使用 examples 中自帶的 soul-examples-http,啟動兩個節點。
修改配置檔案 application.yml
server:
port: 8188
address: 0.0.0.0
soul:
http:
adminUrl: http://localhost:9095
port: 8188
contextPath: /http
appName: http
full: false
server:
port: 8189
address: 0.0.0.0
soul:
http:
adminUrl: http://localhost:9095
port: 8189
contextPath: /http
appName: http
full: false
這裡的 adminUrl 配置一個 soul-admin 即可,連接配接上一個之後,隻要能把資料同步過去,其他的節點也都可以通過資料庫拿到同步後的資料。
啟動後狀态:
4.驗證同步
4.1 負載均衡
【插件清單】【divide】【選擇器清單】【修改】
2個 soul-bootstrap 節點,配置都一緻,預設權重 weight 為50,我們調用幾次接口,驗證負載均衡。
連續調用6次 http://localhost:9195/http/order/findById?id=95 GET 請求,可以在 soul-bootstrap:9195 console 列印如下日志:
可以看到 "The request urlPath is" 輪流調用 8188 和 8189 兩個業務服務節點,因為 weight 都是50,調用比例為 1:1,結果就跟輪詢調用一樣。
2021-01-31 03:48:06.507 INFO 15860 --- [-work-threads-3] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:48:06.509 INFO 15860 --- [-work-threads-3] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:06.510 INFO 15860 --- [-work-threads-3] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:06.594 ERROR 15860 --- [-work-threads-4] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:48:07.440 INFO 15860 --- [-work-threads-6] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:48:07.440 INFO 15860 --- [-work-threads-6] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:07.440 INFO 15860 --- [-work-threads-6] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:07.493 ERROR 15860 --- [-work-threads-7] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:48:07.759 INFO 15860 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:48:07.760 INFO 15860 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:07.760 INFO 15860 --- [-work-threads-9] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:07.779 ERROR 15860 --- [work-threads-10] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:48:08.044 INFO 15860 --- [work-threads-12] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:48:08.044 INFO 15860 --- [work-threads-12] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:08.045 INFO 15860 --- [work-threads-12] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:08.072 ERROR 15860 --- [work-threads-13] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:48:08.388 INFO 15860 --- [work-threads-15] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:48:08.388 INFO 15860 --- [work-threads-15] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:08.389 INFO 15860 --- [work-threads-15] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:08.410 ERROR 15860 --- [work-threads-16] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:48:08.744 INFO 15860 --- [work-threads-18] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:48:08.744 INFO 15860 --- [work-threads-18] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:08.744 INFO 15860 --- [work-threads-18] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:08.763 ERROR 15860 --- [work-threads-19] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
我們再連續調用6次 http://localhost:9196/http/order/findById?id=95 GET 請求,可以在 soul-bootstrap:9196 console 列印如下日志:
同樣可以看到 "The request urlPath is" 輪流調用 8188 和 8189 兩個業務服務節點。
2021-01-31 03:51:50.681 INFO 17340 --- [work-threads-25] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:51:50.686 INFO 17340 --- [work-threads-25] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:50.688 INFO 17340 --- [work-threads-25] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:50.726 ERROR 17340 --- [-work-threads-1] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:51:51.352 INFO 17340 --- [-work-threads-3] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:51:51.352 INFO 17340 --- [-work-threads-3] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:51.352 INFO 17340 --- [-work-threads-3] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:51.375 ERROR 17340 --- [-work-threads-4] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:51:51.595 INFO 17340 --- [-work-threads-6] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:51:51.595 INFO 17340 --- [-work-threads-6] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:51.595 INFO 17340 --- [-work-threads-6] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:51.625 ERROR 17340 --- [-work-threads-7] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:51:51.800 INFO 17340 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:51:51.800 INFO 17340 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:51.800 INFO 17340 --- [-work-threads-9] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:51.819 ERROR 17340 --- [work-threads-10] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:51:51.996 INFO 17340 --- [work-threads-12] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:51:51.997 INFO 17340 --- [work-threads-12] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:51.997 INFO 17340 --- [work-threads-12] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:52.017 ERROR 17340 --- [work-threads-13] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 03:51:52.210 INFO 17340 --- [work-threads-15] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 03:51:52.210 INFO 17340 --- [work-threads-15] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:52.211 INFO 17340 --- [work-threads-15] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:52.232 ERROR 17340 --- [work-threads-16] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
4.2 資料同步
在 9095 修改權重,然後調用接口,檢視是否按照修改後的權重發送請求:
8188 weight 30,8189 weight 60。
從日志中可以看到,調用1次8188,就會調用2次8189,符合預期比例 30:60=1:2。
2021-01-31 04:14:58.252 INFO 15860 --- [work-threads-24] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 04:14:58.252 INFO 15860 --- [work-threads-24] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:58.252 INFO 15860 --- [work-threads-24] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:58.276 ERROR 15860 --- [work-threads-25] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 04:14:58.543 INFO 15860 --- [-work-threads-1] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 04:14:58.544 INFO 15860 --- [-work-threads-1] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:58.544 INFO 15860 --- [-work-threads-1] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:58.574 ERROR 15860 --- [-work-threads-3] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 04:14:59.127 INFO 15860 --- [-work-threads-4] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 04:14:59.127 INFO 15860 --- [-work-threads-4] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:59.127 INFO 15860 --- [-work-threads-4] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:59.155 ERROR 15860 --- [-work-threads-6] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 04:14:59.359 INFO 15860 --- [-work-threads-7] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 04:14:59.360 INFO 15860 --- [-work-threads-7] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:59.360 INFO 15860 --- [-work-threads-7] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:59.394 ERROR 15860 --- [-work-threads-9] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 04:14:59.559 INFO 15860 --- [work-threads-10] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 04:14:59.559 INFO 15860 --- [work-threads-10] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:59.559 INFO 15860 --- [work-threads-10] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:59.587 ERROR 15860 --- [work-threads-12] o.d.s.plugin.base.utils.FallbackUtils : can not match selector data: divide
2021-01-31 04:15:14.866 INFO 15860 --- [work-threads-13] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-31 04:15:14.866 INFO 15860 --- [work-threads-13] o.d.soul.plugin.base.AbstractSoulPlugin : divide rule success match , rule name :/http/order/findById
2021-01-31 04:15:14.866 INFO 15860 --- [work-threads-13] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0