SpringCloud自定义consul服务注册器,获取特定的本地地址进行注册,注销的时候检查并注销其他无效实例

package com.mk.springcloud.config;import com.ecwid.consul.v1.ConsulClient;
import com.ecwid.consul.v1.agent.model.NewService;
import com.ecwid.consul.v1.health.HealthServicesRequest;
import com.ecwid.consul.v1.health.model.Check;
import com.ecwid.consul.v1.health.model.HealthService;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties;
import org.springframework.cloud.consul.discovery.HeartbeatProperties;
import org.springframework.cloud.consul.discovery.TtlScheduler;
import org.springframework.cloud.consul.serviceregistry.ConsulRegistration;
import org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry;
import org.springframework.stereotype.Service;import java.net.Inet4Address;
import java.util.*;@Service
public class ConsulRegistry extends ConsulServiceRegistry {private ConsulDiscoveryProperties properties;private ConsulClient consulClient;@Value("${spring.application.name}")private String applicationName;public ConsulRegistry(ConsulClient client, ConsulDiscoveryProperties properties, @Autowired(required = false) TtlScheduler ttlScheduler, HeartbeatProperties heartbeatProperties) {super(client, properties, ttlScheduler, heartbeatProperties);this.properties = properties;this.consulClient = client;}@SneakyThrows@Overridepublic void register(ConsulRegistration reg) {//获取服务器的ipString address = Inet4Address.getLocalHost().getHostAddress();NewService newService = reg.getService();newService.setAddress(address);newService.getCheck().setHttp("http://" + address + ":" + reg.getService().getPort() + properties.getHealthCheckPath());newService.setId(reg.getService().getName() + "-" + address + ":" + reg.getService().getPort() + "-" + UUID.randomUUID().toString().replace("-",""));super.register(reg);}@Overridepublic void deregister(ConsulRegistration reg) {super.deregister(reg);//查询no pass的服务实例HealthServicesRequest request = HealthServicesRequest.newBuilder().setPassing(false).build();List<HealthService> services = consulClient.getHealthServices(applicationName, request).getValue();for (HealthService service : services) {for (Check check : service.getChecks()) {//注销无效实例if (check.getStatus() != Check.CheckStatus.PASSING) {consulClient.agentServiceDeregister(check.getServiceId());}}}}
}

SpringCloud Consul自定义服务注册相关推荐

  1. Consul微服务注册与发现

    Consul微服务注册与发现 概念 安装与运行 服务提供者 服务消费者 总结:Eureka.Zookeeper.Consul 的异同 概念 1.什么是Consul? Consul是一套开源的分布式服务 ...

  2. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)

    在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...

  3. Node.js + Consul 实现服务注册、健康检查、配置中心

    Node.js + Consul 实现服务注册.健康检查.配置中心 在这篇文章中: 初始化 Consul 客户端 服务注册与健康检查 配置Consul管理控制台 服务配置中心实现 在Nodejs中进行 ...

  4. 一个故事,一段代码告诉你如何使用不同语言(GolangC#)提供相同的能力基于Consul做服务注册与发现

    文章目录 引言 什么是微服务 传统服务 微服务 什么是服务注册与服务发现 为什么要使用不同的语言提供相同的服务能力 服务协调器 服务注册 Golang C#(.NetCore3.1) 服务发现 通过H ...

  5. 『注册中心』Consul微服务注册中心的使用及相关集群搭建

    Consul目录 一.概念篇--注册中心 1. 什么是注册中心 2. 为什么要使用注册中心 3. 注册中心类型 4. 注册中心的优点 二.概念篇--Consul 1. 什么是Consul 2. Con ...

  6. SpringCloud学习之(十八)SpringCloud Alibaba Nacos服务注册和配置中心

    文章目录 (十八)SpringCloud Alibaba Nacos服务注册和配置中心 1.Nacos简介 1.1 为什么叫Nacos 1.2 Nacos是什么 1.3 Nacos能干嘛 1.4 Na ...

  7. Spring Cloud中使用Consul作为服务注册中心时如何获得local service id?

    微服务是目前非常流行和实用的软件架构设计.Spring Cloud是java开发领域最受欢迎也是常用的微服务框架.Spring Cloud Finchley版本已经发布,与此同时Eureka 2.0的 ...

  8. Consul2-使用consul作为服务注册和发现中心

    在windows环境下搭建consul,可以参考我的上一篇博客:https://blog.csdn.net/j903829182/article/details/80960802 在这里进行一个小实战 ...

  9. SpringCloud系列之服务注册中心(Eureka)

    文章目录 0.前言 1.搭建第一个Eureka服务 ①.简介 ②.组成 ③.创建Eureka Server模块 ④.编写POM ⑤.YML ⑥.主启动 ⑦.测试 2.注册服务 ①服务提供者 Ⅰ.添加依 ...

最新文章

  1. 计算机协会成立活动简报,“中国计算机学会CCF走进高校”活动在我校举行
  2. 码农技术炒股之路——抓取日线数据、计算均线和除权数据
  3. 启信宝CEO陈青山:AI+大数据驱动下的金融新生态
  4. 聚类、K-Means、例子、细节
  5. AngularJS日期格式化
  6. 冷迁移oracle数据库,数据库的冷备份迁移
  7. 前端三大框架 Vue.js、AngularJS、React 的区别
  8. ffmpeg处理RTMP流媒体的命令大全
  9. C++ 中缀表达式转后缀表达式(两种方式:栈、二叉树)
  10. 正态分布推导瑞利分布,瑞利信道的模型
  11. 键盘锁定了,无法输入是什么原因?
  12. Matlab龚珀兹曲线模型预测,统计预测方法及预测模型.ppt
  13. 骁龙780G和骁龙888哪个好 骁龙780G和骁龙888对比,哪个更强
  14. 如何给电脑安装双系统,电脑安装双系统教程
  15. The 19th Zhejiang Provincial Collegiate Programming Contest 2022浙江省赛 (A/B/C/G/L/I)
  16. 建立桌面文件管理格子_如何拥有一个清爽的桌面和整齐的文件夹
  17. mysql差异备份提权_MSSQL差异备份取系统权限的相关软件下载
  18. TNS-01189、TNS-01106
  19. 书虫小说在线阅读网站
  20. 【蓝桥杯选拔赛真题08】Scratch画五角星 少儿编程scratch蓝桥杯选拔赛真题讲解

热门文章

  1. quill变html转化,将Quill Delta转换为HTML
  2. tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
  3. C++实现链式基数排序
  4. LeetCode 112路径总和-简单
  5. 十一届蓝桥杯国赛 本质上升序列-dp
  6. 上元节的灯会(亮)-dfs
  7. 仅仅有人物没背景的图片怎么弄_五分钟写作课 人物篇 人物的出场是个关键时刻...
  8. 数据结构与算法--举例分析法- 栈的压入弹出序列
  9. Redis高级数据结构原理解析-bitmap,hyperloglog
  10. JAVA两类比较器的区别(Comparable,Comparator)