Spring Cloud Netflix - Eureka 简介

在本教程中,我们将通过客户端服务来介绍“ Spring Cloud Netflix Eureka ” 。


Eureka 客户端服务允许服务在没有主机名和端口的情况下相互访问和通信。这种架构中唯一的“固定点”由每个服务必须注册的服务注册表组成。


缺点是所有客户端必须实现一定的逻辑来与此固定点进行交互。这将在实际请求之前先假设一段额外的网络延迟。


使用 Netflix Eureka,每个客户端可以同时充当服务器,将其状态复制到与其连接的相同客户端。换句话说,客户端会检索服务注册表的所有连接的客户端的列表,并通过负载均衡算法对所有其他服务进行进一步的请求。


想要知道客户端的存在,他们必须向注册表发送“心跳信号”。


为了实现这个目标,我们将实施三个微服务:

  • 1个注册的服务(Eureka 服务器)

  • 1个 REST 注册表(Eureka 服务器)

  • 1个正在将 REST 服务用作注册表感知客户端的 Web 应用程序(Spring Cloud Netflix 虚拟客户端)。


Eureka 服务器


实现 Eureka 服务器的使用和 as 服务注册表一样简单:将 spring-cloud-starter-eureka-server 添加到依赖关系中,使用 @SpringBootApplication 将 Eureka 服务器注册为 @EnableEurekaServer 并配置一些属性。但我们会一步一步地做。


首先,我们将创建一个新的 Maven 项目,并将依赖项放入其中。您必须注意到,我们正在将 spring-cloud-starter-parent 导入本教程中描述的所有项目:



接下来,我们创建主应用程序类:



最后,我们以 YAML 格式配置属性; 所以这个 application.yml 将是我们的配置文件:



这里我们正在配置应用程序启动端口 - 8761是 Eureka 服务器的默认端口。我们告诉内置的 Eureka 客户端  不要注册“本身”,因为我们的应用程序应该是一个服务器。


现在我们将把我们的浏览器指向 http://localhost:8761来查看 Eureka 仪表板,我们稍后会检查注册的实例。


目前,我们看到基本状况和健康指标等基本指标。



Eureka 客户端


要使 @SpringBootApplication 具有发现感知能力,我们必须将一些 Spring Discovery Client (例如spring-cloud-starter-eureka) 包含在我们的类路径中。

   

那么我们需要使用 @EnableDiscoveryClient 

或 @EnableEurekaClient 

来注解 @Configuration。


后者表明 Spring Boot 明确地使用 Spring Netflix Eureka 服务。为了填补我们的客户端应用程序的生命周期,我们还将 spring-boot-starter-web 软件包放在 pom.xml 中并实现一个 REST 控制器。


但首先,我们将添加依赖关系:



这里我们将实现主应用程序类:



接下来,我们必须设置一个具有配置的 Spring 应用程序的 application.yml,以便在注册的应用程序列表中唯一标识我们的客户端。


我们可以让 Spring Boot 为我们选择一个随机的端口,因为后来我们要使用它的名字访问这个服务,最后,我们必须告诉我们的客户端,找到注册表的位置:



当我们决定以这种方式建立我们的 Eureka 客户端时,我们记住,这种服务应该可以轻松扩展。


现在我们将运行客户端,再次将浏览器指向 http://localhost:8761,以便在 Eureka 仪表板上查看其注册状态。通过使用信息中心,我们可以进一步配置,例如将注册的客户端的主页链接到仪表板以进行管理。但是,配置选项不在本文的范围之内。



Feign 客户端


要使用三个有依赖关系的微服务完成我们的项目,我们现在将使用 Spring Netflix Feign Client 实现一个使用 REST 消息的 Web 应用程序。


将 Feign 作为可被发现感知的 Spring  RestTemplate,使用接口与端点进行通信。该接口将在运行时自动实现,而不是 service-urls,它使用的是 service-names。


如果没有 Feign,我们将必须将 EurekaClient 的实例自动注入到我们的控制器中,我们可以通过 service-name 作为 Application 对象接收服务信息。


我们将使用此应用程序获取此服务的所有实例的列表,选择合适的应用程序,并使用此 InstanceInfo 获取主机名和端口。这样,我们可以使用任何 http 客户端执行标准请求。


例如:



RestTemplate 也可以通过它的名称来访问 eureka 客户端,但这个话题已经超出了教程内容。


要配置我们的 Feign Client 项目,我们将在 pom.xml 中添加以下四个依赖项:



Feign Client 位于 spring-cloud-starter-feign 包。要启用它,我们必须使用 @EnableFeignClients 注解。要使用它,我们只需使用 @FeignClient(“service-name”)注释,并将其自动注入到 controller 中。


创建这种 Feign 客户端的一个好方法是使用 @RequestMapping 注释方法创建接口,并将它们放在一个单独的模块中。这样他们可以在服务器和客户端之间共享。在服务器端,您可以将其实现为 @Controller,客户端可以使用注解 @FeignClient。


此外,spring-cloud-starter-eureka 软件包需要包含在项目中,并且可以通过使用 @EnableEurekaClient 注释主应用程序类来实现。


spring-boot-starter-web 和 spring-boot-starter-thymeleaf 这两个依赖是用来呈现视图的,从我们的 REST 服务中提取数据。


这是 Feign Client 界面注解:



这里我们将实现同时充当控制器的主应用程序类:



这是视图的 HTML 模板:



application.yml 配置文件与上一步几乎相同:



现在我们可以构建并运行这个服务。最后,我们将浏览器指向 http://localhost:8080/get-greeting,它应该显示如下内容:



结论


正如我们所看到的,我们现在可以使用 Spring Netflix Eureka 服务器实现一个服务注册表,并注册一些 Eureka 客户端。


因为在第3步中提到 Eureka 客户端侦听随机选择的端口,它并不知道没有加入注册表的端口的位置。使用 Feign Client 和我们的注册表,我们可以定位和使用 REST 服务,即使位置更改。


最后,我们有一个关于在微服务架构中使用 service discovery 的大图。




您可以在GitHub(https://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-eureka)上找到源代码,其中还包含一组 Docker 相关的文件,用于使用 docker-compose (http://www.baeldung.com/dockerizing-spring-boot-application) 在我们的项目中创建容器。


原文链接

http://www.baeldung.com/spring-cloud-netflix-eureka


作者:刘志伟



欢迎转载,但转载请注明作者与出处。谢谢!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值