Eureka 学习之 Eureka Client(二)

Eureka 学习之 Eureka Client(二)

Posted by 金志宏 on August 1, 2019

#Eureka 学习之 Eureka Client(二)

上一章节学了怎么样快速注册一个 Eureka Server 注册中心,这章主要学习讲怎么把Eureka Client注册到 Eureka Server 注册中心去。EurekaDubbo 不同, Eureka Client 同时可以是 ProviderConsumer。即是服务提供者,又是服务消费者。每个Client都可以消费其它的已注册的Client。同时注册自己后也可以被其它Client消费。

1. Eureka Client Provider

还是通过 idea 自带的 spring Initializr 插件快速创建项目

###1.1 创建项目

  1. Idea 通过 File-New-project 选择 Spring Initializr 插件创建,其它默认 Next

edEbs1.png

  1. 配置自己的 Project Metadata 为了学习及演示,我定义该 Client 为Provider。

ed1wCt.png

  1. 这里需要选择 Spring Cloud Discovery 中的 Eureka Discovery Client 依赖以及Spring Web Start依赖。添加 Web 依赖是为了定义一个 Restful 接口规范的服务

ed8L1x.png

1.2 快速配置

  1. 对 application.properties 进行配置,也可以使用 yml 文件,看个人喜好了。properies文件的配置很简单,比 Eureka Server 还少一些,比较关键的是eureka.client.service-url.defaultZone 这个配置是指向了 Eureka Server 的注册地址。也就是这个 Client 注册到哪个Eureka Server 上。
# Eureka 客户端口号
server.port=20001
# 应用名
spring.application.name=spring-cloud-eureka-provider
# Eureka 相关配置
# 1.注册地址 注册到 Eureka Server 服务
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/
  1. SpringCloudEurekaProviderApplication 增加 EnableDiscoveryClient 注解
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudEurekaProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaProviderApplication.class, args);
    }

}
  1. 通过 @RestController 编写一个接口,我这里用 UserController 这是一个用户接口的微服务
@RestController
public class UserController {

    @GetMapping("/getUser/{id}")
    public String getUser(@PathVariable() String id){
        return "This is User [id = " + id + "]";
    }
}
  1. 启动 SpringCloudEurekaProviderApplication 后通过地址 http://localhost:10001/ 可以看到 Client 已经被成功注册到 Eureka Server 中,状态为UP。

edYyAe.png

  1. 测试接口 http://localhost:20001/getUser/3 返回 This is User [id = 3] 可以正常提供服务

2. Eureka Client Consumer

通过同样的方式再创建一个Client 作为服务消费者,这里注意一个概念。服务的消费者自身也可以是 Eureka Clinet 注册到Eureka Server。也就是消费者也是服务提供者。

  1. 新建 Spring Boot项目

ewujNq.png

  1. 添加 Eureka Discovery ClientSpring Web StarterOpenFeign 依赖。OpenFeign是作为Spring Cloud的子项目之一,为微服务架构下服务之间的调用提供了解决方案。他可以利用声明式的方式定义Web服务客户端。

ewuXEn.png

2.1 快速配置

  1. application.properties 的配置和 Provider 差不多,只是定义了不同的server.protapplication.name。同事他也注册到Eureka Server 注册中心
# Eureka 客户端口号
server.port=30001
# 应用名
spring.application.name=spring-cloud-eureka-consumer
# Eureka 相关配置
# 1.注册地址 注册到 Eureka Server 服务
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/

  1. SpringCloudEurekaConsumerApplication中增加@EnableFeignClients注解,这个注解会把consumer也注册到注册中心去
@SpringBootApplication
@EnableFeignClients
public class SpringCloudEurekaConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaConsumerApplication.class, args);
    }

}
  1. 通过注解方式编写一个 @FeignClient接口
  • @FeignClient 定义了provider的微服务名称,这里用的是application-name
  • 接口方法上定义了@GetMapping的注解和RestFul的调用地址
@FeignClient(value = "spring-cloud-eureka-provider")
public interface UserService {
    @RequestMapping(value = "/getUser/{id}", method = RequestMethod.GET)
    String getUser(@PathVariable("id") String id);
}
  1. 编写一个Controller来调用接口
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/getUser/{id}")
    public String getUser(@PathVariable String id){
        return userService.getUser(id);
    }
}
  1. 启动项目查看http://localhost:10001/ 此时发现已经有2个服务被注册到了Server上

ew8Xsf.png

  1. 测试接口 http://localhost:30001/getUser/3 返回 This is User [id = 3]

3. 总结

Spring Cloud Eureka Client 作为服务的提供方,亦可作为消费者。一个 Client 实例即是一个微服务,对于多个拥有相同名字的实例,则是一个Client集群,Eureka 提供了软负载均衡,这个后面学习。

4. 参考

[Spring Cloud netflix 英文官网][https://spring.io/projects/spring-cloud-netflix]