前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud 学习笔记(2) 服务治理 Eureka

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

作者头像
张云飞Vir
发布2021-05-13 15:26:37
3090
发布2021-05-13 15:26:37
举报
文章被收录于专栏:写代码和思考写代码和思考

1. 背景

我们开始学习 Eureka。

2. 知识

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

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

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

  • Eureka服务端,我们也称为服务注册中心
  • Eureka客户端,主要处理服务的注册与发现

3. 示例

示例是这样的。

  • 1、搭建服务注册中心
  • 2、搭建一个服务提供者,注册到上面的“注册中心”
  • 3、搭建一个服务使用者,调用 “服务提供者” 提供的 服务

1) 搭建服务注册中心

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

先创建项目,按下图。

image.png

修改配置文件 application.properties

代码语言:javascript
复制
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

代码语言:javascript
复制
server.port=1111
spring.application.name=peerl1

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

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

代码语言:javascript
复制
server.port=1112
spring.application.name=peerl2

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

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

代码语言:javascript
复制
127.0.0.1 peer1
127.0.0.1 peer2

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

image.png

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

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

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

代码语言:javascript
复制
    java -jar hello-service.jar --server.port=8081
    java -jar hello-service.jar --server.port=8082

步骤2:搭建一个消费者

添加依赖:

代码语言:javascript
复制
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'
}

代码:

代码语言:javascript
复制
/**
 * @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);
    }
}

配置文件:

代码语言:javascript
复制
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/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景
  • 2. 知识
  • 3. 示例
    • 1) 搭建服务注册中心
      • 2) 搭建一个服务提供者
        • 3.搭建高可用注册中心
          • 4.使用 ribbon 客户端负载均衡访问服务
          • 扩展
          • 参考:
          相关产品与服务
          微服务引擎 TSE
          微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档