Spring Cloud Eureka 服务治理以及高可用

Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分, 它基于 NetflixEureka 做了二次封装, 主要负责完成微服务架构中的服务治理功能。 Spring Cloud 通过为Eureka 增加了 Spring Boot 风格的自动化配置,我们只需通过简单引入依赖和注解配置就能让 Spring Boot 构建的微服务应用轻松地与 Eureka 服务治理体系进行整合。
了解springcloud架构可以加求求:三五三六二四七二五九
Eureka包含

Eureka服务端: 服务注册中心

Eureka客户端: 处理服务的注册和发现

基础架构

服务注册中心: Eureka提供的服务端,提供服务注册与发现功能。

服务提供者: 提供服务的应用,将自己提供的服务注册到Eureka,以供其他应用发现。

服务消费者: 消费者应用从服务注册中心获取服务列表,从而使消费者可以知道去何处调用所需要的服务。

入门代码

Eureka服务端编写

1、新建一个Spring Boot项目,名为eureka-server,引入依赖

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2、配置文件
spring:
  application:
    name: eureka
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 不检索服务
server:
  port: 8761

3、在启动类上添加注解 @EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

ok,启动eureka-server

打开浏览器访问 http://localhost:8761/
在这里插入图片描述
可以看到Eureka服务端已经完成了。就这么简单

Eureka客户端编写

1、新建一个Spring Boot项目,名为eureka-client,引入依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

记住一定要引入spring-boot-starter-web依赖,,不然项目启动不起来自动停止。

2、配置文件

  spring:
  application:
    name: eureka-client
server:
  port: 8080
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

3、启动类配置注解 @EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

启动eureka-client客户端,刷新eureka服务端页面,已经显出注册的客户端了
在这里插入图片描述
ok,客户端也编写完成了。

到此就结束了,

但真的就结束了吗???

有人要问了,Spring Cloud Eureka服务端和客户端都写好了,但是怎么使用呢?

下面就讲各服务间怎么调用。

新建个controller层

@RestController
public class HelloController {
 
    @RequestMapping(value = "/hello")
    public String index() {
        System.out.println("请求到了");
        return "hello";
    }
}

通过访问 http://localhost:8080/hello 可以看到正常返回数据
在这里插入图片描述
新建一个Spring Boot项目,名为eureka-consumer 配置和eureka-client类似,端口改一下,这里改为8085,启动项目

再看一下eureka服务端的管理平台,eureka-consumer已经注册了。

微服务间调用这里讲两种方式,一种是通过RestTemplate,一种是使用Spring Cloud Feign

在这之前要说一下Spring Cloud Ribbon

Ribbon是一个基于HTTP和TCP的客户端负载均衡

如果微服务布置多台,就需要Ribbon进行负载均衡了。

eureka-client改下端口再启动一个, 可以看到这里已经有两个实例了。
在这里插入图片描述
引入Ribbon依赖

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

RestTemplate 方式

RestTemplate实现了对HTTP请求的封装处理

在启动类上加入创建RestTemplate bean

@Bean
@LoadBalanced // 负载均衡注解
public RestTemplate restTemplate() {
    return new RestTemplate();
}

创建ConsumerController,

@RestController
public class ConsumerController {
 
    @Autowired
    private RestTemplate restTemplate;
 
    @RequestMapping(value = "/eureka-consumer")
    public String helloConsumer() {
        String result = restTemplate.getForEntity("http://eureka-client/hello", String.class).getBody();
        return result;
    }
}

访问 http://localhost:8085/eureka-consumer 正常数据返回
在这里插入图片描述
Ribbon既然是负载均衡工具,那当然也要测试一下了。eureka-client改下端口在起一台,然后访问接口多次,通过打印日志可以看出两台eureka-client都有被访问,而且是以线性轮询的方式被访问,Ribbon默认是线性轮询方式负载均衡。

Spring Cloud Feign 方式

Spring Cloud Feign是对RestTemplate进一步封装,由它来帮助我们定义和实现依赖服务接口的定义。在Spring Cloud Feign的实现下,我们只需创建一个接口并用注解的方式来配置它。

快速入门

1、添加依赖

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、启动类添加注解 @EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class RibbonConsumerApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }
}

3、定义接口ServiceClient 并添加注解@FeignClient(“eureka-client”) 参数为在Eureka注册的名称

@FeignClient("eureka-client")
public interface ServiceClient {
 
    @RequestMapping(value = "/hello")
    String index();
}

4、在controller中注入ServiceClient 然后调用方法即可

@RestController
public class ConsumerController {
    
    @Autowired
    private ServiceClient serviceClient;
 
    @RequestMapping(value = "/eureka-consumer2")
    public String helloConsumer2() {
        String result = serviceClient.index();
        return result;
    }
}

访问 http://localhost:8085/eureka-consumer2 也能正常返回数据

Eureka的高可用,通过互相注册的方式实现。这里启动三台Eureka服务端信息如下

eureka-server1 8761

eureka-server2 8762

eureka-server3 8763

配置信息入下

// eureka-server1的配置信息
spring:
  application:
    name: eureka-server1
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka,http://localhost:8763/eureka
    register-with-eureka: false
    fetch-registry: false # 不检索服务
server:
  port: 8761
 
 
 
// eureka-server2的配置信息
spring:
  application:
    name: eureka-server2
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8763/eureka
    register-with-eureka: false
    fetch-registry: false # 不检索服务
server:
  port: 8762
 
 
 
// eureka-server3的配置信息
spring:
  application:
    name: eureka-server3
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka
    register-with-eureka: false
    fetch-registry: false # 不检索服务
server:
  port: 8763

eureka-client保持配置不变,依然注册在http://localhost:8761/eureka/ 上

浏览器分别访问 http://localhost:8761/ http://localhost:8762/ http://localhost:8763/,查看到这三台里的服务注册信息都有eureka-client, 那是因为这三台Eureka服务端之间互相注册,所以都有eureka-client的注册信息。

Eureka服务端配置了高可用,下面就是客户端配置了。

修改eureka-client的配置文件

spring:
  application:
    name: eureka-client
server:
  port: 8081
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/

这样就可以注册三台Eureka服务端了。

到这里是Spring Cloud Eureka入门和高可用讲完了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章