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,去试试吧~
Linux获取本机公网IP,调整双节点主从服务的RPC调用逻辑的更多相关文章
- C#获取本机公网IP
/// <summary> /// 获取本机公网IP /// </summary> /// <returns></returns> public sta ...
- python3脚本获取本机公网ip
python脚本获取本机公网ip 1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.代码实现 import requests import re r ...
- python脚本获取本机公网ip
1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.python脚本实现: #!/usr/bin/python # -*- coding:utf8 -*- ...
- .net获取本机公网IP代码
类的代码如下: using System; using System.Net; using System.Text.RegularExpressions; namespace Keleyi.Com { ...
- python 3 获取本机公网ip的几种方法
参考博客:https://blog.csdn.net/conquerwave/article/details/77666226 from urllib.request import urlopen f ...
- C语言检查本机公网IP并发送邮件
这是一个用来获取本机公网IP地址,并检查是否是配置里保存的IP地址,假设不是,就向指定的邮箱发送一个邮件,报告这个IP地址的一段小代码.放到开机启动中,电脑不设password的时候万一丢了,还能有个 ...
- [记]WIndow/Linux 获取本机(全部)IPv4、IPv6、MAC地址方法 (C/C++)
Linux 获取本机IP.MAC地址用法大全 //#include <sys/types.h> #include <ifaddrs.h> #include <sys/io ...
- 【Win 10 应用开发】获取本机的IP地址
按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事. 有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条.至 ...
- 获取本机的IP地址(局域网)与主机名称
编写内容保存为bat @echo off &setlocal enabledelayedexpansion Rem '/*========获取本机的IP地址(局域网)=========*/ e ...
随机推荐
- Notion-douan:搭建自己的阅读清单
前言 交完论文盲审稿,终于从接近一年的实习.秋招和论文的忙碌中闲下来. 在复盘秋招的时候发现自己虽然看过不少书,但缺少整理和思考,所以想趁这个机会梳理一下自己的阅读习惯,希望以后再读新的东西可以更系统 ...
- Vue-cli安装步骤,搭建一个完整的 Vue 项目
安装node环境下载 node.js 官网地址:https://nodejs.org/en/ 下载完成后打开然后一路next安装完成后打开 dos 窗口输入命令:node -v 回车会输出node的版 ...
- 请写出你最常见到的5个runtime exception?
对于一个有1-2年左右编程经验的人来说,总会经常遇到一些常见的异常,其中有些就是Runtime Exception.比如: NullPointerException - 当调用一个未初始化的引用变量( ...
- xml文件使用DOM解析,报异常org.xml.sax.SAXParseException,"characterEncoding" 的引用必须以 ';' 分隔符结尾异常
这个异常一般为xml文件对&的报错,只需要将&改为转义后的&即可解决
- SpringMvc用什么对象从后台向前台传递数据的?
通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以通过el表达式拿到.
- CI_CD 简单了解
- 什么是可重入锁(ReentrantLock)?
举例来说明锁的可重入性 public class UnReentrant{ Lock lock = new Lock(); public void outer(){ lock.lock(); inne ...
- 区分 BeanFactory 和 ApplicationContext?
BeanFactory ApplicationContext 它使用懒加载 它使用即时加载 它使用语法显式提供资源对象 它自己创建和管理资源对象 不支持国际化 支持国际化 不支持基于依赖的注解 支持基 ...
- 什么是通知Advice?
特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice.Spring AOP 使用一个 Advice 作为拦截器,在 JoinPoint "周围"维护一系列的 ...
- BMZCTF SDNISC2020_过去和现在
SDNISC2020_过去和现在 打开附件就一张图片 根据题意感觉是图片中隐藏了什么信息 使用binwalk -e分离这里foremost不行 三个文件查看在第一个中发现flag