如何使用Linux命令获取本机公网IP,并调整Java双节点主从服务的RPC调用逻辑?

2026-05-22 06:241阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计480个文字,预计阅读时间需要2分钟。

如何使用Linux命令获取本机公网IP,并调整Java双节点主从服务的RPC调用逻辑?

简单记录一次双节点的服务调用过程:

现有:服务A的节点A1、A2,服务B的节点B1、B2。服务A和B通过Netty实现RPC通信,可能引发比较复杂的通信问题。

如何使用Linux命令获取本机公网IP,并调整Java双节点主从服务的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,去试试吧~

  

本文共计480个文字,预计阅读时间需要2分钟。

如何使用Linux命令获取本机公网IP,并调整Java双节点主从服务的RPC调用逻辑?

简单记录一次双节点的服务调用过程:

现有:服务A的节点A1、A2,服务B的节点B1、B2。服务A和B通过Netty实现RPC通信,可能引发比较复杂的通信问题。

如何使用Linux命令获取本机公网IP,并调整Java双节点主从服务的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,去试试吧~