spring cloud注册中心,服务提供作者,服务消费者的一些区别

Spring Cloud · 2019-06-14 · 201 人浏览

Spring Cloud Eureka, 使用Netflix Eureka来实现服务注册与发现。

Eureka服务端,我们也称为服务注册中心。

  同其他服务注册中心 一 样,支持高可用配置。它依托于强 一 致性提供良好的服务实例可用性,可以应对多种不同的故障场景。如果Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中的其他分片会把它们的状态再次同步回来。以在AWS 上的实践为例,Netflix推荐每个可用的区域运行 一 个Eureka服务端,通过它来形成集群

Eureka客户端,主要处理服务的注册与发现。

客户端服务通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。同时,它也能从服务端查询当前注
册的服务信息并把它们缓存到本地并周期性地刷新服务状态。

 

注册中心搭建:

部分pom.xml

<dependencies>

     <dependency>
          <groupid>org.springframework.cloud</groupid>
          <artifactid>spring-cloud-starter-eureka-server</artifactid>
     </dependency>

</dependencies>

通过 @EnableEurekaServer 注解启动 一 个服务注册中心提供给其他应用进行对话。

在默认设置下, 该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为, 只需在 application.properties 中增加如下配置:

 eureka.client.register-with-eureka: 由于该应用为注册中心,所以设置为 false, 代表不向注册中心注册自己。 

eureka.client.fetch-registry: 由于注册中心的职责就是维护服务实例,它并不需要去检索服务, 所以也设置为 false 

 

注册服务提供者:

部分pom.xml:

<dependency>
     <groupid>org.springframework.boot</groupid>
     <artifactid>spring-boot-starter-web</artifactid>
</dependency>
<dependency>
     <groupId>org.springframework.boot</groupid>
     <artifactid>spring-boot-starter-test</artifactid>
<scope>test</scope>
</dependency>

<dependency>
     <groupid>org.springframework.cloud</groupid>
     <artifactid>spring-cloud-starter-eureka</artifactid>
</dependency>

 

 以下HelloController通过url  “xxx:xxx/hello”调用该方法 通过注入 DiscoveryClient对象, 在日志中打印出服务的相关内容。

 对DiscoveryClient源码的一些解释:https://blog.csdn.net/Ay_Ly/article/details/81098660

  在主类中通过加上 @EnableDiscoveryClient 注解,激活Eureka中的DiscoveryClient 实现(自动化配置,创建 DiscoveryClient 接口针对 Eureka 客户端的 EurekaDiscoveryClient 实例),才能实现上述 Controller 中对服务信息的输出。

配置文件:

spring.application.name = hello-service

eureka.client.serviceUrl.defaultZone = http://localhost:llll/eureka/

 

 

服务消费的任务由Ribbon完成

它在Eureka服务发现的基础上,实现了 一 套对服务实例的选择策略,从而实现对服务的消费。

部分pom.xml

<dependencies>
     <dependency>
     <groupid>org.springframework.boot</groupid>
     <artifactid>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
     <groupid>org.springframework.cloud</groupid>
     <artifactid>spring-cloud-starter-eureka</artifactid>
</dependency>
<dependency>
     <groupid>org.springframework.cloud</groupid>
     <artifactid>spring-cloud-starter-ribbon</artifactid>
</dependency>

</dependencies>

  应用主类 ConsumerApplication, 通过 @EnableDiscoveryClient注解让该应用注册为 Eureka 客户端应用, 以获得服务发现的能力。 同时, 在该主类中创建 RestTemplate 的 Spring Bean 实例,并通过 @LoadBalanced 注解开启客户端负载均衡。

  创建ConsumerContioller类并实现/Ribbon-consumer接口 。通过在上面创建的RestTemplate 来实现对 H ELLO -SER VI CE服务提供的
/hello接口进行调用

 restTemplate:借助 RestTemplate,Spring应用能够方便地使用REST资源 Spring的 RestTemplate访问使用了模版方法的设计模式.

getForEntity() 发送一个HTTP GET请求,返回的ResponseEntity包含了响应体所映射成的对象。

配置文件:

spring.applicatiion.name = ribbon-consumer
server.port=9000
eureka.client.serviceUrl.defaultZone = http://localhost:llll/eureka/