包括服务注册中心,服务提供方(注册服务),服务使用方(调用服务)
注册中心:
1. 使用spring-cloud-starter-eureka-server,主类中使用@EnableEurekaServer,开启服务注册功能,增加服务注册中心
2. 配置yml
server.port=10001
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
3. 启动注册中心工程后,访问:http://localhost:10001/ 可通过spring自带的管理器查看注册中心的服务注册信息。
服务注册:
1. 各个服务提供方使用spring-cloud-starter-eureka,主类中使用@EnableEurekaClient,注册到中心。
2. 配置yml
spring.application.name=provider-service
server.port=18443
eureka.client.serviceUrl.defaultZone=http://localhost:10001/eureka/
说明:
spring.application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。
eureka.client.serviceUrl.defaultZone属性对应服务注册中心的配置内容,指定服务注册中心的位置。
3. 启动该工程后,再次访问:http://localhost:10001/ 可看到compute-service已注册到中心。
服务调用:
1)Ribbon
使用spring-cloud-starter-ribbon,启动类中使用@EnableEurekaClient,开启服务发现功能,
创建RestTemplate实例到容器中,并通过@LoadBalanced注解到该实例,开启均衡负载能力。
配置yml
spring.application.name=ribbon-service
server.port=30001
eureka.client.serviceUrl.defaultZone=http://localhost:10001/eureka/
优点:简单、直接。
2)Feign
使用spring-cloud-starter-feign,启动类中使用@EnableFeignClients,开启Feign功能,
创建interface,并通过@FeignClient(value=服务名)绑定服务提供方服务到interface(相当于被调用接口的声明),调用方直接注入该interface,通过调用本地接口就可实现RPC。Feign已包含Ribbon的负载均衡能力。
配置yml
spring.application.name=feign-service
server.port=40001
eureka.client.serviceUrl.defaultZone=http://localhost:10001/eureka/
优点:就像调用本地方法一样调用远程接口
实例源码: register-server service-provider feign-call ribbon-call