Eureka 是Netflix出品的用于实现服务注册和发现的工具。Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。
打个比方,Eureka server是房屋租赁中心,eureka client就是我们登记在册的房屋,我们房东把这些房子交给托管中心以后就不需要再管了,租客会自己找到需要的房子,都是通过房屋租赁中心来完成的,租客和房东不需要直接接触。
Eureka Server(注册中心)
1、pom文件引入的依赖:
2、在启动类上添加注解@EnableEurekaServer
3、配置文件:
在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,在application.properties添加以下配置:
eureka.client.register-with-eureka :表示是否将自己注册到Eureka Server,默认为true。
eureka.client.fetch-registry :表示是否从Eureka Server获取注册信息,默认为true。
eureka.client.serviceUrl.defaultZone :设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
启动工程后,访问:http://localhost:8000/,可以看到下面的页面,其中还没有发现任何服务。
Eureka Client
此处我们需建立两个client,一个producer,一个consumer。
先说服务提供者producer:
1、配置文件:
2、启动类加注解@EnableEurekaClient
3、配置文件:
配置文件主要是指明了注册中心的地址。
4、建一个controller,以便被调用。
服务调用方consumer:
1、pom配置。如果spring cloud 的版本不支持feign,你需要在引入feign的依赖。
我用的是Greenwich版本。
2、启动类加注解@EnableEurekaClient和@EnableFeignClients注解。
@EnableEurekaClient:启用服务注册与发现
@EnableFeignClients:启用feign进行远程调用
3、配置文件:
4、feign调用实现
name:远程服务名,即spring.application.name配置的名称。
此类中的方法和远程服务中contoller中的方法名和参数需保持一致。
5、web层调用远程服务
将HelloRemote注入到controller层,像普通方法一样去调用即可。
至此,一个最简单的服务的注册与调用的例子就完成了。
测试:
简单调用
依次启动spring-cloud-eureka、spring-cloud-producer、spring-cloud-consumer三个项目
先输入:http://localhost:9000/hello?name=alison 检查spring-cloud-producer服务是否正常
返回:hello alison,this is first messge
说明spring-cloud-producer正常启动,提供的服务也正常。
浏览器中输入:http://localhost:9001/hello/alison
返回:hello alison,this is first messge
说明客户端已经成功的通过feign调用了远程服务hello,并且将结果返回到了浏览器。
负载均衡:
负载均衡的意思是说实际需求中我们可能需要建立多台机器来进行性能水平的提升,这个时候,同样的多个请求同时发送过来的时候,我们可以做到均匀的把请求分配到各个机器上,这样就避免了请求响应时间过长等问题。
在feign中已经实现了负载均衡的相关功能。我们直接使用就可以了。
请将上面的producer再复制一个出来,
将配置文件中的端口改一下,以防相同端口出现端口被占的情况,
然后把controller中的响应信息改一下(主要是为了你能更直观地看到效果)
然后自行自行测试。
补充:@EnableDiscoveryClient与@EnableEurekaClient区别
在使用Spring Cloud feign使用中在使用服务发现的时候提到了两种注解,一种为@EnableDiscoveryClient,一种为@EnableEurekaClient,用法上基本一致。
spring cloud中discovery service有许多种实现(eureka、consul、zookeeper等等),@EnableDiscoveryClient基于spring-cloud-commons, @EnableEurekaClient基于spring-cloud-netflix。
其实用更简单的话来说,就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。
具体请参考https://www.jianshu.com/p/f6db3117864f