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

现有:

  服务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调用逻辑的更多相关文章

  1. C#获取本机公网IP

    /// <summary> /// 获取本机公网IP /// </summary> /// <returns></returns> public sta ...

  2. python3脚本获取本机公网ip

    python脚本获取本机公网ip   1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.代码实现 import requests import re r ...

  3. python脚本获取本机公网ip

    1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.python脚本实现: #!/usr/bin/python # -*- coding:utf8 -*- ...

  4. .net获取本机公网IP代码

    类的代码如下: using System; using System.Net; using System.Text.RegularExpressions; namespace Keleyi.Com { ...

  5. python 3 获取本机公网ip的几种方法

    参考博客:https://blog.csdn.net/conquerwave/article/details/77666226 from urllib.request import urlopen f ...

  6. C语言检查本机公网IP并发送邮件

    这是一个用来获取本机公网IP地址,并检查是否是配置里保存的IP地址,假设不是,就向指定的邮箱发送一个邮件,报告这个IP地址的一段小代码.放到开机启动中,电脑不设password的时候万一丢了,还能有个 ...

  7. [记]WIndow/Linux 获取本机(全部)IPv4、IPv6、MAC地址方法 (C/C++)

    Linux 获取本机IP.MAC地址用法大全 //#include <sys/types.h> #include <ifaddrs.h> #include <sys/io ...

  8. 【Win 10 应用开发】获取本机的IP地址

    按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事. 有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条.至 ...

  9. 获取本机的IP地址(局域网)与主机名称

    编写内容保存为bat @echo off &setlocal enabledelayedexpansion Rem '/*========获取本机的IP地址(局域网)=========*/ e ...

随机推荐

  1. K8S原来如此简单(八)ServiceAccount+RBAC

    ServiceAccount ServiceAccount是给运行在Pod的程序使用的身份认证,Pod容器的进程需要访问API Server时用的就是ServiceAccount账户. Service ...

  2. JavaScript day04 函数

    函数 函数讲解 函数是什么? 函数其实就抽取写好的js代码 作为一个通用的代码块 (封装) 作用: 减少代码冗余 (过多) 方便调用 (提供效率 提高代码的可读性) 便于维护 (二次修改) js有哪些 ...

  3. synchronized已经不在臃肿了,放下对他的成见之初识轻量级锁

    前言 物竞天择,适者生存.JDK也在不断的优化中.关于JDK中synchronized锁内部也是不断的优化,前面我们分析了偏向锁用来解决初期问题,随着争抢的不断堆积轻量级锁营运而生. 关注我,一个不断 ...

  4. HTTPS-各种加密方式

    推荐阅读:https://www.cnblogs.com/zwtblog/tag/计算机网络/ 目录 HTTPS 对称加密(AES) 非对称加密(RSA) 工作过程 分析 优缺点 常用算法 混合加密 ...

  5. Mybatis 的一级、二级缓存?

    1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 C ...

  6. Spring的@Enable*注解的工作原理

    转自:https://blog.csdn.net/chengqiuming/article/details/81586948 一 列举几个@Enable*注解的功能 @EnableAspectJAut ...

  7. 修改openstack Centos镜像的默认用户的密码

    Ubuntu官方提供的OpenStack镜像是用Key来登录的,太麻烦,可以改成用密码来登录. 修改image的工具叫:guestfish. yum install libguestfs-tools ...

  8. vmware 磁盘清理---还原虚拟机硬盘大小

    linux host: 1.使用dd命令将客户机未使用的磁盘空间用0填满 cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill ...

  9. 学习heartbeat-02安装及配置

    2.部署Heartbeat高可用需求 2.1 操作系统 CentOS-6.8-x86_64 2.2 Heartbeat服务主机资源准备 主服务器A: 主机名:heartbeat-1-130 eth0网 ...

  10. 记一次 Nuxt 3 在 Windows 下的打包问题

    0. 背景 之前用 Nuxt 3 写了公司的官网,包括了样式.字体图标.图片.视频等,其中样式和字体图标放在了 assets/styles 和 assets/fonts 目录下,而图片和视频则放在了 ...