1.说明

本文介绍SpringCloud发现服务代码的开发,
通过使用EurekaClient,DiscoveryClient来发现注册中心的服务等,
从而可以自定义客户端对注册中心的高级用法。

2.使用EurekaClient发现服务

通过Spring自动注入的EurekaClient,
不仅能发现服务实例,
还能查看客户端连接等各种配置。

2.1.代码

package com.yuwen.spring.config.client.controller;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Applications; @RestController
public class EurekaClientController {
private static Logger logger = LoggerFactory.getLogger(DiscoveryClientController.class); @Autowired
private EurekaClient eurekaClient; @GetMapping("/eureka")
public String getEurekaClient() {
EurekaClientConfig config = eurekaClient.getEurekaClientConfig();
if (!(config instanceof EurekaClientConfigBean)) {
return eurekaClient.toString();
}
EurekaClientConfigBean eurekaConfig = (EurekaClientConfigBean) config;
logger.info("serviceUrl=" + eurekaConfig.getServiceUrl());
Applications applications = eurekaClient.getApplications();
List<Application> registeredApplications = applications.getRegisteredApplications();
for (Application application : registeredApplications) {
logger.info("Application Name=" + application.getName());
List<InstanceInfo> instances = application.getInstances();
for (InstanceInfo instance : instances) {
StringBuilder sb = new StringBuilder();
sb.append(instance.getAppName()).append("\t").append(instance.getHostName()).append("\t")
.append(instance.getPort()).append("\t").append(instance.getVIPAddress());
logger.info("InstanceInfo=" + sb);
}
} return eurekaClient.toString();
}
}

2.2.测试

使用浏览器访问:
http://localhost:8005/eureka
页面返回:

org.springframework.cloud.netflix.eureka.CloudEurekaClient@6715470c

控制台打印:

serviceUrl={fetch-registry=true, defaultZone=http://localhost:7007/eureka, register-with-eureka=true}
Application Name=CONFIG-CLIENT
InstanceInfo=CONFIG-CLIENT 192.168.171.1 8005 config-client

3.使用DiscoveryClient发现服务

使用DiscoveryClient可以发现注册中心上的服务,
注册中心可以是Eureka,也可以是Zookeeper等,
因为不使用原始Netflix EurekaClient,
所以在某种包装器后面的DiscoveryClient更易于使用。
它也能提供通过服务名称查询对应的所有服务实例等功能。

3.1.代码

package com.yuwen.spring.config.client.controller;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class DiscoveryClientController {
private static Logger logger = LoggerFactory.getLogger(DiscoveryClientController.class); @Autowired
private DiscoveryClient discoveryClient; @GetMapping("/discovery")
public Object getDiscoveryClient() {
List<String> services = discoveryClient.getServices();
for (String service : services) {
logger.info("service=" + service);
} String serviceId = "CONFIG-CLIENT";
List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);
for (ServiceInstance instance : instances) {
StringBuilder sb = new StringBuilder();
sb.append(instance.getServiceId()).append("\t").append(instance.getHost()).append("\t")
.append(instance.getPort()).append("\t").append(instance.getUri());
logger.info("instance=" + sb);
}
return discoveryClient;
}
}

3.1.测试

使用浏览器访问:
http://localhost:8005/discovery

页面返回:

config-client00config-client0

控制台打印:

service=config-client
instance=CONFIG-CLIENT 192.168.171.1 8005 http://192.168.171.1:8005

可以看到Eureka上面只有一个服务CONFIG-CLIENT,
这个服务只有一个实例http://192.168.171.1:8005,
其实就是提供http://localhost:8005/discovery这个服务的实例。

SpringCloud发现服务代码(EurekaClient,DiscoveryClient)的更多相关文章

  1. SpringCloud——Eureka服务注册和发现

    一.SpringCloud和Dubbo SpringCloud整合了一套较为完整的微服务解决方案框架,而Dubbo只是解决了微服务的几个方面的问题. content Dubbo SpringCloud ...

  2. SpringCloud+Consul 服务注册与服务发现

    SpringCloud+Consul 服务注册与服务发现 1. 服务注册: 在Spring.factories有一段: # Discovery Client Configuration org.spr ...

  3. springcloud之服务注册与发现

    本次分享的是关于springcloud服务注册与发现的内容,将通过分别搭建服务中心,服务注册,服务发现来说明:现在北京这边很多创业公司都开始往springcloud靠了,可能是由于文档和组件比较丰富的 ...

  4. SpringCloud - 2. 服务注册 和 发现

    SpringCloud 的服务注册和发现是由Eureka来完成. 1.eureka server 1.1 依赖 <dependency> <groupId>org.spring ...

  5. SpringCloud微服务(01):Eureka组件,管理服务注册与发现

    本文源码:GitHub·点这里 || GitEE·点这里 一.Eureka基本架构 1.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,SpringCl ...

  6. 将SpringCloud Eureka 服务注册与发现部署到docker

    一.前言 最近在学习docker,顺便把之前学习的spring cloud 部署到Docker 中.至于什么是SpringCloud的服务注册与发现,什么是docker,我这里就不作赘述了.可以先去学 ...

  7. SpringCloud微服务治理技术入门(SCN)

    1.集群.分布式.微服务 首先先理解三个感念 什么是集群?: 同一个业务,部署在多个服务器上,目的是实现高可用,保证节点可用! 什么是分布式?: 一个业务分拆成多个子业务,部署在不同的服务器上,每个子 ...

  8. springCloud 微服务框架搭建入门(很简单的一个案例不喜勿扰)

    Spring cloud 实现服务注册及发现 服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务. clou ...

  9. springcloud微服务架构搭建

    SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...

随机推荐

  1. RAC(Reactive Cocoa)常见的类

    导入ReactiveCocoa框架 在终端,进入Reactive Cocoa文件下 创建podfile 打开该文件 并配置 use_frameworks! pod 'ReactiveCocoa', ' ...

  2. redis入门到精通系列(八):redis的高可用--主从复制详解

    (一)主从复制介绍 前面所讲的关于redis的操作都属于单机操作,单机操作虽然操作简单,但是处理能力有限,无法高可用.所谓高可用性,就是指当一台服务器宕机的时候,有备用的服务器能顶替上,在单机操作上这 ...

  3. vue 键盘事件keyup/keydoen

    使用: <!DOCTYPE html> <html> <head> <title></title> <meta charset=&qu ...

  4. 查询表名和表备注(中文名) 及 dba_tables、all_tables和user_tables的区别

    1. select a.* from ALL_TAB_COMMENTS a --查表名和表中文名select a.* from ALL_TAB_COLUMNS a --查询表字段属性select a. ...

  5. 为什么企业全面云化需要IT战略支撑和驱动?

    引子:为什么传统企业全面云化一直磨磨唧唧举步维艰? 笔者将企业上云大体上分为几个阶段: 第一个阶段是基础设施虚拟化.即将应用从物理机搬到(lift and shift migration)虚拟机上.基 ...

  6. IT服务生命周期

    一.概述 IT服务生命周期由规划设计(Pianning&Design).部署实施(Implementing).服务运营(Opera,tion).持续改进(Improvemenit)和监督管理( ...

  7. MySQL查询数据库表空间大小

    一.查询所有数据库占用空间大小 SELECT TABLE_SCHEMA, CONCAT( TRUNCATE(SUM(data_length) / 1024 / 1024, 2), ' MB' ) AS ...

  8. Spring Cloud Eureka源码分析之三级缓存的设计原理及源码分析

    Eureka Server 为了提供响应效率,提供了两层的缓存结构,将 Eureka Client 所需要的注册信息,直接存储在缓存结构中,实现原理如下图所示. 第一层缓存:readOnlyCache ...

  9. 铁人三项(第五赛区)_2018_rop

    拿到程序依旧老样子checksec和file一下 可以看到是32位的程序开启了nx保护,将程序放入ida进行查看 shift+f12 看到没有system和binsh等字样,考虑用泄露libc来做这道 ...

  10. AtCoder Beginner Contest 148 题解

    目录 AtCoder Beginner Contest 148 题解 前言 A - Round One 题意 做法 程序 B - Strings with the Same Length 题意 做法 ...