Tim

一枚野生程序员~

  • 主页
  • 分类
  • 标签
  • 归档
  • 关于
所有文章 工具

Tim

一枚野生程序员~

  • 主页
  • 分类
  • 标签
  • 归档
  • 关于

服务注册与发现

阅读数:次 2020-02-06
字数统计: 1.7k字   |   阅读时长≈ 6分

mark

本篇主要讲述了微服务架构的组成,每个组件的作用是什么,重点是实现了Eureka Server和Eureka Client的实战演练,总体来说服务注册与发现就是微服务入门的基础,了解并掌握了在SpringCloud体系中的服务注册与发现的组件原理以及使用方法,由于start.spring.io的访问速度实在是不能忍,白天自己编译了整个SpringBoot的初始化器,我直接给出地址了,方便其他的朋友也可以用:

  • http://139.159.234.67:8080
  • http://zouchanglin.cn:8080 就是上面的IP地址

如果还是很慢的话,可以下载我编译好的文件(下载地址),直接

1
java -jar Spring-Initializr.jar

在IDEA自定义初始化器地址填写 http://localhost:8080 即可,注意这个版本是没有Web UI的,只有供三分初始化器使用的JSON串,Web UI几乎不咋用所以没考虑编译进来!

简单的微服务架构

微服务架构的基础框架/组件

服务注册与发现

服务提供了肯定要注册上来,并且把自己的地址信息表现出来,然后服务的调用方才能从这个组件上发现目标服务

服务网关 Service GateWay

服务不但要内部能访问到,而且肯定有一部分服务需要暴露给外界,所以这就是服务网关的通俗理解,服务网关是连接内外的大门,网关会屏蔽后台服务的一些细节,比如后台的程序要升级呀对外用户是无感知的,还有路由的功能,可以将外部的请求反向路由到内部的某个具体的微服务,还可以做一些限流和容错的功能,因为所有请求都会经过网关,所以可以控制流量,监控和日志也可以在这个里完成,用户认证、授权、反爬虫之类都是在服务网关完成的,作用是非常巨大的

后端通用服务

也称为中间层服务 Middle Tier Service,把自己注册到服务注册表

前端服务

也成为边缘服务 Edge Servcice,从服务注册于发现组件中调用自己想要的后端服务

mark

微服务是一种架构,具体实现主要分为阿里系和SpringCloud系,阿里系主要使用Dubbo做服务治理,使用ZK做服务注册中心,在17年左右Dubbo死而复生之后就疯狂的更新,很多公司也在用Dubbo做服务治理;拎一个系列那就是SpringCloud系列,也就是SpringCloud全家桶,Spring Cloud是一个开发工具集,包含多个子项目,利用SpringBoot的开发便利,主要是对Netflix开源组件的进一步封装,基本囊括了微服务所需要的绝大部分功能组件,Spring Cloud简化了分布式应用的开发,需要更加深刻的理解分布式架构的特点!

服务注册与发现

SpringCloud Eureka,基于Netflix Eureka做的二次封装,主要有两个组件构成

  • Eureka Server 注册中心
  • Eureka Client 服务注册

服务端就是供服务注册的服务器,客户端用来简化与服务器的交互,作为轮询负载均衡器,并提供服务的自动切换功能,客户端连接到服务注册中心并维持心跳连接,Eureka就能够监控系统中的服务是否正常工作

Eureka Server

Eureka这个单词的意思就是找到了,有了的意思

首先是吧SpringBoot和SpringCloud的版本对应起来,否则可能会造成很多意料之外的错误,比如eureka注册了结果找不到服务类啊,比如某些Jar导入不进来啊,等等这些错误,下图是对应关系,SpringCloud的版本名称是按照伦敦地铁站的名字命名的:

mark

我这里选择的是Finchley的版本

mark

接下来需要开启SpringBoot项目中的Eureka Server

只需要在启动类上注解 @EnableEurekaServer 即可,同时,一个Eureka作为Server也作为一个Client,所以需要自己注册自己,需要在配置文件中添加图如下配置(添加spring application name就是为了让注册实例的Name不是UNKOWN):

1
2
3
4
5
6
7
8
eureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka

spring:
application:
name: eureka

启动之后访问localhost:8080即可看到

mark

但是作为注册中心,我又不想在页面上把它当作一个注册实例,那么添加如下配置

1
2
3
4
5
eureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka
register-with-eureka: false

因为Eureka的默认端口是8761,所以这里也改一改

1
2
3
4
5
6
7
8
9
10
11
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
register-with-eureka: false
spring:
application:
name: eureka

server:
port: 8761

Eureka Client

首先通过SpringBoot创建一个工程,选择Eureka Discovery Client,我试过目前最新版只有spring-boot-starter-web也勾上才可以,不然直接启动失败!

mark

接下来在启动类配置@EnableDiscoveryClient,代表这是一个Eureka Client,然后配置文件如下

1
2
3
4
5
6
7
8
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/

spring:
application:
name: client-01

打开我们之前配置的Eureka Server,因为Eureka Server的地址是 http://localhost:8761/eureka/ 所以在配置的时候需要配置这个地址,因为你要像Eureka Server去注册,然后给自己起个名字叫做 client-01

接下来先开启Eureka Server,我为了方便启动,直接打成了Jar包,并做成了脚本放在桌面上!

然后启动client-01,然后打开localhost:8761 就看到了Eureka Client

mark

mark

如果频繁重启Client端,注意到会有这样的问题

mark

Eureka Server 和 Eureka Client采用的是心跳检测连接,Server端不会停的检查Client是否存活,会在一定的时间统计Client端的上线率,这个上线率就是一个比例,当低于某个比例的时候就会爆出这样的警告,意思就是Client的上线率太低了,可能某个时间点就不知道你是上线还是下线,那么我就当作你是上线的,俗话讲就叫宁可信其有,不可信其无,实际上是它的一种自我保护模式,在开发环境可以把它关掉,避免显示的是在线但实际上却不在线的情况,所以在开发环境最好是把这种模式给关掉!现在来到Eureka Server端,加入配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
register-with-eureka: false
server:
enable-self-preservation: false # 关闭这种自我保护机制
spring:
application:
name: eureka

server:
port: 8761

记住生成环境不要做这样的配置,在关闭这种机制之后呢,又会出现这样的警告,无需关闭,它就是告诉我们不建议关闭这个机制,但是开发环境就这样配置很有必要的!

mark

赏

谢谢你请我喝咖啡

支付宝
微信
  • 本文作者: Tim
  • 本文链接: https://zouchanglin.cn/1542234195.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 许可协议。转载请注明出处!
  • SpringCloud
  • 微服务架构

扫一扫,分享到微信

康威法则与微服务
Gradle的使用和配置
  1. 1. 简单的微服务架构
    1. 1.0.1. 服务注册与发现
    2. 1.0.2. 服务网关 Service GateWay
    3. 1.0.3. 后端通用服务
    4. 1.0.4. 前端服务
  • 2. 服务注册与发现
    1. 2.1. Eureka Server
    2. 2.2. Eureka Client
  • © 2017-2021 Tim
    本站总访问量次 | 本站访客数人
    • 所有文章
    • 工具

    tag:

    • 生活
    • Android
    • 索引
    • MySQL
    • 组件通信
    • Nginx
    • JavaSE
    • JUC
    • JavaWeb
    • 模板引擎
    • 前端
    • Linux
    • 计算机网络
    • Docker
    • C/C++
    • JVM
    • 上传下载
    • JavaEE
    • SpringCloud
    • Golang
    • Gradle
    • 网络安全
    • 非对称加密
    • IDEA
    • SpringBoot
    • Jenkins
    • 字符串
    • vim
    • 存储
    • 文件下载
    • Mac
    • Windows
    • NIO
    • RPC
    • 集群
    • 微服务
    • SSH
    • 配置中心
    • XML
    • Chrome
    • 压力测试
    • Git
    • 博客
    • 概率论
    • 排序算法
    • 分布式
    • 异常处理
    • 文件系统
    • 哈希
    • openCV
    • 栈
    • 回溯
    • SpringCore
    • 流媒体
    • rtmp
    • 面向对象
    • Vue
    • ElementUI
    • 软件工程
    • 异步
    • 自定义UI
    • ORM框架
    • 模块化
    • 交互式
    • Jsoup
    • Http Client
    • LRUCache
    • RabbitMQ
    • 消息通信
    • 服务解耦
    • 负载均衡
    • 权限
    • 多线程
    • 单例模式
    • Protobuf
    • 序列化
    • Python
    • m3u8
    • 堆
    • 二叉树
    • 自定义View
    • 观察者模式
    • 设计模式
    • 线程池
    • 动态扩容
    • 高可用
    • GC
    • ffmpeg
    • SpringMVC
    • REST
    • Redis
    • 缓存中间件
    • UML
    • Maven
    • Netty
    • 高性能网络
    • IPC通信
    • IO
    • Stream
    • 发布订阅
    • SQLite
    • Hash
    • 集合框架
    • 链表
    • Lambda
    • 汇编语言
    • 组件化
    • Router
    • 开发工具

      缺失模块。
      1、请确保node版本大于6.2
      2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
      npm i hexo-generator-json-content --save

      3、在根目录_config.yml里添加配置:

        jsonContent:
          meta: false
          pages: false
          posts:
            title: true
            date: true
            path: true
            text: false
            raw: false
            content: false
            slug: false
            updated: false
            comments: false
            link: false
            permalink: false
            excerpt: false
            categories: false
            tags: true
      

    • 思维导图
    • PDF工具
    • 无损放大
    • 代码转图
    • HTTPS证书