Spring Cloud 学习笔记(2) 服务治理 Eureka

2021-05-11  本文已影响0人  张云飞Vir

1. 背景

我们开始学习 Eureka。

2. 知识

Eureka 是 Spring Cloud Netflix 微服务套件中的一部分。Netflix Eureka来实现服务注册与发现, 它包含了服务端和客户端组件。

服务注册:在服务治理框架中, 通常都会构建一个注册中心, 每个服务单元向注册中心登记自己提供的服务, 将主机与端口号、 版本号、 通信协议等一些附加信息告知注册中心, 注册中心按服务名分类组织服务清单。

服务发现: 由于服务间的调用不再通过具体地址来实现, 而是通过向服务名发起请求调用实现。调用方需要向服务注册中心咨询服务, 并 获取所有服务的实例清单, 以实现对具体服务实例的访问。

3. 示例

示例是这样的。

1) 搭建服务注册中心

服务注册中心会维护一个“服务清单”,它记录了主机与端口号、 版本号、 通信协议等一些附加信息等。启动后的服务注册中心将等待 “服务提供者” 来注册。

先创建项目,按下图。

image.png

修改配置文件 application.properties

server.port=1111
eureka.instance.hostname=localhost
# 由于该应用为注册中心,所以设置 为 false, 代表不向注册中心注册自己。
eureka.client.register-with-eureka=false
# 由于注册中心的职责就是维护服务实例,它并不需要去检索服务, 所以也设置为 false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

2) 搭建一个服务提供者

我们演示创建一个简单的微服务,访问 /hello 返回字符串。它将注册到上面搭建的 注册中心。

先创建项目

image.png

这是,再次看出 eureka,可以看到已经注册成功

image.png

在完成了服务注册中心的搭建之后,接下将一个Spring Boot 应用加 入 Emeka 的服务治理体系中去。

3.搭建高可用注册中心

在微服务架构这样的分布式环境中, 我们需要充分考虑发生故障的情况, 所以在生产 环境中必须对各个组件进行高可用部署。

EurekaServer的高可用实际上就是将自己作为服务向其他服务注册中心注册自己, 这 样就可以形成一组互相注册的服务注册中心, 以实现服务清单的互相同步, 达到高可用的 效果。

示例
我们将搭建 peer1 和 peer2 两个 Eureka,互相注册。一旦注册完毕后,它们之间将会互相同步。

步骤1,第一个 Eureka 服务:peer1 的配置
修改配置文件 application.properties

server.port=1111
spring.application.name=peerl1

eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/

步骤2,第二个 Eureka 服务:peer2 的配置
修改配置文件 application.properties

server.port=1112
spring.application.name=peerl2

eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/

步骤3,修改hosts 以看到效果

127.0.0.1 peer1
127.0.0.1 peer2

步骤4,访问
访问 http://localhost:1111/ 和,http://localhost:1112 都可以看到:

image.png

4.使用 ribbon 客户端负载均衡访问服务

在上面例子的基础上,我们再加上一个 消费者,这里将创建一个 ribbonconsumer 工程,访问上面的 服务提供者。

步骤1:先启动 服务提供者的两个实例

    java -jar hello-service.jar --server.port=8081
    java -jar hello-service.jar --server.port=8082

步骤2:搭建一个消费者

添加依赖:


dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

代码:

/**
 * @description:
 * @author: zhangyunfei
 * @date: 2021/5/11 16:35
 */
@RestController
public class ReadController {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Autowired
    RestTemplate restTemplate;

    @RequestMapping(value = "/read", method = RequestMethod.GET)
    public String index() {
        return restTemplate.getForEntity("http://HELLO-SERVICE-1/hello", String.class).getBody();
    }

    private void log(String str) {
        System.out.println(str);
    }
}

配置文件:

server.port=9001
spring.application.name=ribbonconsumer
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/

步骤3:启动 消费者访问
这时可以看到,每次访问的 “服务提供者的”实例是不一样的。

image.png

扩展

我的实例代码地址:https://github.com/vir56k/demo/tree/master/eureka_demo3

参考:

《Spring Cloud微服务实战》
https://docs.spring.io/spring-cloud-netflix/docs/current/reference/html/

上一篇下一篇

猜你喜欢

热点阅读