当前位置 : 主页 > 编程语言 > 其它开发 >

Linux获取本机公网IP,Java调整双节点主从服务的RPC调用逻辑

来源:互联网 收集:自由互联 发布时间:2022-05-30
简单记录一次双节点的之间的服务调用叭 ~ 现有: 服务A的双节点A1、A2 服务B的双节点B1、B2 服务A 和服务B 通过 Netty 实现 RPC 通信,可能会导致比较玄学的问题。如图: 要做到 A1 订阅

简单记录一次双节点的之间的服务调用叭 ~

现有:

  服务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 的启动命令

curl icanhazip.com #获取本机公网IP
#!/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 --server.port=9092 >/usr/local/app/logs/user.out

 

2、Java项目的启动类Application加入变量获取

@Override
    public void run(String... args) throws Exception {
        String type = args[0];
        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,去试试吧~

 

 

 

 

 

 

 

 

 

 

 

 

 

  

上一篇:ASP.NET Core实现JWT授权与认证(2.实战篇)
下一篇:没有了
网友评论