1. 程式人生 > 其它 >Linux獲取本機公網IP,調整雙節點主從服務的RPC呼叫邏輯

Linux獲取本機公網IP,調整雙節點主從服務的RPC呼叫邏輯

簡單記錄一次雙節點的之間的服務呼叫叭 ~

現有:

  服務A的雙節點A1、A2

  服務B的雙節點B1、B2

 

服務A 和服務B 通過 Netty 實現 RPC 通訊,可能會導致比較玄學的問題。如圖:

 

 

 

要做到 A1 訂閱 B1 的服務,A2 訂閱 B2 的服務。如圖:

 

 

 服務A採用的是GitLab-Ci 結合 Docker實現的自動化部署,部署成功A1後通過工具複製到另一臺伺服器做A2

不想調整部署流程,則考慮通過伺服器的IP來判斷主從服務的呼叫

 

1、Java服務的容器內啟動命令,獲取本機公網IP,並將變數傳入 java 的啟動命令

#!/bin/bash
# author: Linnuo
# date: 
2021-12-16 # Filename: userStart.sh # Description: 啟動跟單前臺 HOST_IP=$(curl icanhazip.com) echo $HOST_IP if [ $HOST_IP == "0.0.0.1" ] ; then SERVER="master" elif [ $HOST_IP == "0.0.0.2" ] ; then SERVER="slave" else SERVER="other" fi nohup java -Ddruid.mysql.usePingMethod=false -Djava.security.egd=file:/dev/./urandom -jar -Dspring.profiles.active=dev /usr/local/app/user.jar --server.port=9092
$SERVER >/usr/local/app/logs/user.out

 

2、Java專案的啟動類Application加入變數獲取

@Override
    public void run(String... args) throws Exception {
        String type = Arrays.toString(args);
        NettyClient client;
        if ("master".equalsIgnoreCase(type)){
            // 主服務
            client = new NettyClient(1
); } else { // 從服務 client = new NettyClient(0); } client.run(); FollowTaskThread taskThread = new FollowTaskThread(); taskThread.start(); AccountTrigger trigger = new AccountTrigger(); trigger.run(); // 註冊一個伺服器關閉鉤子 Runtime.getRuntime().addShutdownHook(new Thread(client::destroy)); final TaskServer server = new TaskServer(); server.start(); server.blockUntilShutdown(); }

 

專案啟動後即可根據本機的公網IP去訂閱對應的服務

 

OK,去試試吧~