文章目录
-
1.概述
-
2.Demo 应用样例
-
-
2.1.Eureka Server注册中心搭建
-
2.2.Eureka Server-服务发布者
-
2.3.Eureka Client-服务消费者
-
2.4.项目源码
-
1.概述
1.1.官方概述地址
https://spring.io/projects/spring-cloud-netflix
1.2.官方源码地址
https://github.com/Netflix/eureka
1.3.官方Eureka ServerDemo地址
https://github.com/spring-cloud-samples/eureka
1.4.概述理解
1.4.1.Eureka是Netflix公司开源的一个服务发现组件
1.实际上Netflix开源了好多组件,Eureka只是其中的一个,大家可以查看GitHub上面的相关开源项目,
1.4.2.首先Eureka是一个服务注册与服务发现的中间组件:相当于Dubbo
1.在微服务架构系统之中,我们经常提三个角色:
1.1.注册中心 (Register):服务发布者将服务发布到注册中心,服务消费者从注册中心获取可以进行访问的服务列表;
1.2.服务提供者(Provider):需要发布服务的应用
1.3.服务消费者(Consumer):需要访问服务的应用
1.4.3.Eureka架构组成
1.4.3.1.Eureka-Server:我们可以认为就是服务的注册中心(Register)
1.4.3.2.Eureka-Client:服务提供者(Provider)和服务消费者(Consumer)
1.4.3.3.架构调用流程(High level architecture 高可用架构)
1.4.3.3.1.注册中心:Eureka-Server
1.首先,我们可以看到上面注册中心使用了集群部署:us-east-1c,us-east-1d,us-east-1e(美国东部1c,1d,1e注册中心)
2.集群中的机器,数据会进行同步复制更新(replicate),保证注册中心数据最终一致性;
1.4.3.3.2.服务发布者:Eureka-Client(Application-Service)
1.服务发布者,即下游相关的平台或者是提供服务的应用,对于自己的应用服务(Application Service),做下面的操作
1.1.服务注册:将自己的服务接口方法以及服务发布的地址等,注册到Eureka Server注册中心中;
1.2.服务更新:对已经发布到注册中心的服务通知进行更新操作;
1.3.服务删除:通过相关操作(如停止应用操作)通知注册中心,将应用服务从注册中心删除(移除);
2.服务发布者通过Eureka这个注册中心,每30秒发送一次心跳更新注册中心的数据;
如果服务消费者一段时间之内不能更新这个服务发布者的服务信息,那么90s之内,这个服务将会被注册中心移除;
1.4.3.3.3.服务消费者:Eureka-Client(Application-Client)
1.服务消费者(Application Client),在应用启动的时候,根据自己订阅的服务,会去注册中心(Eureka Server)拉取所有的服务清单列表
会缓存到应用本地缓存,
2.
1.4.4.Eureka是是一个基于REST的服务,主要用于定位运行在应用域中的中间层服务
2.Demo 应用样例
2.1.Eureka Server注册中心搭建
2.1.1.创建项 [demo-spring-cloud-netflix-eureka-server]
2.1.2.引入Eureka Server 版本
这里的版本引入主要是下面这个
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
当然pom里还有一些其他的内容,我们不做一一讲解
pom.xml原始内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gaoxinfu.demo.spring.cloud</groupId>
<artifactId>demo-spring-cloud-netflix-eureka-server</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-spring-cloud-netflix-eureka-server</name>
<description>Eureka Server demo project</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.BUILD-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>eurekademo.EurekaApplication</start-class>
<java.version>1.8</java.version>
<docker.image.prefix>springcloud</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.2.3</version>
<configuration>
<baseImage>openjdk:8-jre-alpine</baseImage>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<exposes>8761</exposes>
<entryPoint>["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- defined in spring-cloud-starter-parent pom (as documentation hint),
but needs to be repeated here -->
<configuration>
<requiresUnpack>
<dependency>
<groupId>com.netflix.eureka</groupId>
<artifactId>eureka-core</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.eureka</groupId>
<artifactId>eureka-client</artifactId>
</dependency>
</requiresUnpack>
</configuration>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<configuration>
<failOnNoGitDirectory>false</failOnNoGitDirectory>
</configuration>
</plugin>
<plugin>
<!--skip deploy (this is just a test module) -->
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot-local</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
2.1.3.定义application.yml
server:
port: 8761
eureka:
client:
registerWithEureka: true
fetchRegistry: true
server:
waitTimeInMsWhenSyncEmpty: 0
server.port:定义Eureka Server 端口
eureka.client.registerWithEureka :表示是否将自己注册到Eureka Server,默认为true。由于当前这个应用就是Eureka Server,故而设为false。
eureka.client.fetchRegistry :表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。
2.1.4.定义bootstrap.yml
spring:
application:
name: demo-spring-cloud-netflix-eureka-server
cloud:
config:
uri: ${CONFIG_SERVER_URL:http://localhost:8888}
2.1.5.创建启动Java
package com.gaoxinfu.demo.spring.cloud.netflix.eureka.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @Description:
* @Author: gaoxinfu
* @Date: 2020-09-11 11:18
*/
@EnableAutoConfiguration
@EnableEurekaServer
public class DemoSpringCloudNetflixEurekaServerApp {
public static void main(String[] args) {
SpringApplication.run(DemoSpringCloudNetflixEurekaServerApp.class,args);
}
}
2.1.16.启动控台
2.2.Eureka Server-服务发布者
2.2.1.创建项目[demo-spring-cloud-netflix-eureka-provider]
2.2.2.引入jar包版本
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2.2.3.定义application.properties
spring.application.name=demo-srping-cloud-netflix-eureka-provider
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
server.port=8762
2.2.4.创建启动Java
package com.gaoxinfu.demo.spring.cloud.netflix.eureka.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @Description:
* @Author: gaoxinfu
* @Date: 2020-09-13 12:04
*/
@SpringBootApplication
@EnableEurekaClient
public class DemoSpringCloudNetflixEurekaProviderApp {
public static void main(String[] args) {
SpringApplication.run(DemoSpringCloudNetflixEurekaProviderApp.class,args);
}
}
2.2.5.启动验证问题:provider启动了之后立刻死掉了
2020-09-22 14:01:12.352 INFO 19151 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3d74bf60: startup date [Tue Sep 22 14:01:12 CST 2020]; root of context hierarchy
2020-09-22 14:01:12.702 INFO 19151 --- [ main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2020-09-22 14:01:12.782 INFO 19151 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$e525a3bd] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.2.RELEASE)
2020-09-22 14:01:13.319 INFO 19151 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
2020-09-22 14:01:13.478 INFO 19151 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available
2020-09-22 14:01:13.479 WARN 19151 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/demo-srping-cloud-netflix-eureka-provider/default": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
2020-09-22 14:01:13.482 INFO 19151 --- [ main] .DemoSpringCloudNetflixEurekaProviderApp : No active profile set, falling back to default profiles: default
2020-09-22 14:01:13.496 INFO 19151 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@791d1f8b: startup date [Tue Sep 22 14:01:13 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@3d74bf60
2020-09-22 14:01:14.060 INFO 19151 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=692091bb-c487-3110-9c25-53bfc11f7aa0
2020-09-22 14:01:14.077 INFO 19151 --- [ main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2020-09-22 14:01:14.126 INFO 19151 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$e525a3bd] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-09-22 14:01:14.154 WARN 19151 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2020-09-22 14:01:14.154 INFO 19151 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-09-22 14:01:14.157 WARN 19151 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2020-09-22 14:01:14.157 INFO 19151 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-09-22 14:01:14.557 INFO 19151 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2020-09-22 14:01:14.564 INFO 19151 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure
2020-09-22 14:01:14.564 INFO 19151 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure
2020-09-22 14:01:14.565 INFO 19151 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure
2020-09-22 14:01:14.567 INFO 19151 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager]
2020-09-22 14:01:14.575 INFO 19151 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope]
2020-09-22 14:01:14.581 INFO 19151 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=791d1f8b,type=ConfigurationPropertiesRebinder]
2020-09-22 14:01:14.587 INFO 19151 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0
2020-09-22 14:01:14.596 INFO 19151 --- [ main] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING
2020-09-22 14:01:14.620 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1
2020-09-22 14:01:14.764 INFO 19151 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson
2020-09-22 14:01:14.764 INFO 19151 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson
2020-09-22 14:01:14.872 INFO 19151 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml
2020-09-22 14:01:14.872 INFO 19151 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml
2020-09-22 14:01:14.990 INFO 19151 --- [ main] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
2020-09-22 14:01:15.004 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Disable delta property : false
2020-09-22 14:01:15.004 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null
2020-09-22 14:01:15.004 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Force full registry fetch : false
2020-09-22 14:01:15.004 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Application is null : false
2020-09-22 14:01:15.004 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Registered Applications size is zero : true
2020-09-22 14:01:15.004 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Application version is -1: true
2020-09-22 14:01:15.004 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Getting all instance registry info from the eureka server
2020-09-22 14:01:15.103 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : The response status is 200
2020-09-22 14:01:15.106 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Starting heartbeat executor: renew interval is: 30
2020-09-22 14:01:15.107 INFO 19151 --- [ main] c.n.discovery.InstanceInfoReplicator : InstanceInfoReplicator onDemand update allowed rate per min is 4
2020-09-22 14:01:15.110 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1600754475109 with initial instances count: 1
2020-09-22 14:01:15.113 INFO 19151 --- [ main] o.s.c.n.e.s.EurekaServiceRegistry : Registering application DEMO-SRPING-CLOUD-NETFLIX-EUREKA-PROVIDER with eureka with status UP
2020-09-22 14:01:15.113 INFO 19151 --- [ main] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1600754475113, current=UP, previous=STARTING]
2020-09-22 14:01:15.129 INFO 19151 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_DEMO-SRPING-CLOUD-NETFLIX-EUREKA-PROVIDER/10.56.39.27:demo-srping-cloud-netflix-eureka-provider:8762: registering service...
2020-09-22 14:01:15.142 INFO 19151 --- [ main] .DemoSpringCloudNetflixEurekaProviderApp : Started DemoSpringCloudNetflixEurekaProviderApp in 3.389 seconds (JVM running for 4.149)
2020-09-22 14:01:15.144 INFO 19151 --- [ Thread-11] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@791d1f8b: startup date [Tue Sep 22 14:01:13 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@3d74bf60
2020-09-22 14:01:15.144 INFO 19151 --- [ Thread-11] o.s.c.n.e.s.EurekaServiceRegistry : Unregistering application DEMO-SRPING-CLOUD-NETFLIX-EUREKA-PROVIDER with eureka with status DOWN
2020-09-22 14:01:15.145 WARN 19151 --- [ Thread-11] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1600754475145, current=DOWN, previous=UP]
2020-09-22 14:01:15.146 INFO 19151 --- [ Thread-11] o.s.c.support.DefaultLifecycleProcessor : Stopping beans in phase 0
2020-09-22 14:01:15.147 INFO 19151 --- [ Thread-11] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
2020-09-22 14:01:15.147 INFO 19151 --- [ Thread-11] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans
2020-09-22 14:01:15.148 INFO 19151 --- [ Thread-11] com.netflix.discovery.DiscoveryClient : Shutting down DiscoveryClient ...
2020-09-22 14:01:15.156 INFO 19151 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_DEMO-SRPING-CLOUD-NETFLIX-EUREKA-PROVIDER/10.56.39.27:demo-srping-cloud-netflix-eureka-provider:8762 - registration status: 204
2020-09-22 14:01:15.157 INFO 19151 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_DEMO-SRPING-CLOUD-NETFLIX-EUREKA-PROVIDER/10.56.39.27:demo-srping-cloud-netflix-eureka-provider:8762: registering service...
2020-09-22 14:01:15.162 INFO 19151 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_DEMO-SRPING-CLOUD-NETFLIX-EUREKA-PROVIDER/10.56.39.27:demo-srping-cloud-netflix-eureka-provider:8762 - registration status: 204
2020-09-22 14:01:15.163 INFO 19151 --- [ Thread-11] com.netflix.discovery.DiscoveryClient : Unregistering ...
2020-09-22 14:01:15.169 INFO 19151 --- [ Thread-11] com.netflix.discovery.DiscoveryClient : DiscoveryClient_DEMO-SRPING-CLOUD-NETFLIX-EUREKA-PROVIDER/10.56.39.27:demo-srping-cloud-netflix-eureka-provider:8762 - deregister status: 200
2020-09-22 14:01:15.176 INFO 19151 --- [ Thread-11] com.netflix.discovery.DiscoveryClient : Completed shut down of DiscoveryClient
Process finished with exit code 0
2.2.6.问题解决:引入spring-boot-starter-web包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.2.7.再次启动验证-启动成功-查看eureka-server注册中心
2.2.8.我们在服务端provider项目中创建一个Controller
2.2.8.1.HelloController
package com.gaoxinfu.demo.spring.cloud.netflix.eureka.provider.controller;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description:
* @Author: gaoxinfu
* @Date: 2020-09-22 11:41
*/
@EnableEurekaClient
@RestController
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(String name) {
return name + ", Welcome to Eureka Client Test Demo!";
}
}
2.2.8.2.页面测试:直接验证服务端服务是否正常
http://localhost:8762/hello?name=gaoxinfu
从上面可以看出来,服务端的服务是没有问题的;
2.3.Eureka Client-服务消费者
2.4.项目源码
版权声明:本文为u014636209原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。