微服务简介

首先理解一个概念——高可用,即保证服务器的高度可用,减少停工时间;原来的单体应用只有一个服务器,所有服务(功能)都在该服务器上,如果出现某些突发情况,服务器挂了,整个系统就停工了。而微服务保证多个服务存在于多个服务器,或多个服务器共同维护一个服务(集群),某一个服务挂了并不会过大的影响整体,不会导致整个系统的停工

微服务的实现

每个微服务对应一个服务器,一个数据库;但是不同服务互相直接调用起来非常麻烦而且没有条理,所以将所有模块注册到一个共同的地方,每个请求都找到注册中心,再由注册中心来发送到各个服务器

服务注册

注册中心的实现(Netfilx)

  1. 新建一个springboot项目模块,添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 为入口类添加注解@EnableEurekaServer,表示服务器端
  2. 配置文件
server:port: 8761eureka:instance:hostname: localhostclient:register-with-eureka: false #是否注册到注册中心fetch-registry: false #是否调用其他服务service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

成功后可看到如下页面:

实现服务注册

  1. 创建一个服务,并引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 入口类添加注解@EnableEurekaClient,表示客户端,会找到服务器端并注册上去
  2. 配置
server:port: 9001spring:application:name: service-user #该服务在注册中心的名字eureka:client:service-url:defaultZone: http://localhost:8761/eureka/

注册成功后可以在注册中心看到该服务:

共用服务

对于如响应实体类这样每个服务中都相同的类可以放在一个共用服务里面,而不是在每一个服务中写一遍,共用服务创建后在其他服务的pom文件中引入该依赖即可

实现服务之间直接调用

User

    @GetMapping("get/{id}")public ResponseVO getById(@PathVariable Integer id){return ResponseVO.FORBIDDEN;}

Order

    @Autowiredprivate RestTemplate restTemplate;@GetMapping("getUser/{id}")public ResponseVO getById(@PathVariable Integer id){ResponseEntity<ResponseVO> entity =  restTemplate.getForEntity("http://localhost:9001/user/get/1",ResponseVO.class);ResponseVO responseVO = entity.getBody();return responseVO;}

通过RestTemplate可以在某个服务需要用到另一个服务的数据时实现调用,但这种直接调用的方式绕过了注册中心,这样的方式将ip写死了,必须知道对方的ip或域名才能进行调用,如果部署的地址发生改变需要同时进行更改,不推荐使用

Ribbon

使用Ribbon实现服务调用

spring-cloud-starter-netflix-eureka-client 3.0版本的已经内置ribbon,所以ribbon也失去了版本维护,如果强行添加会导致jar包冲突,从而报错——No instances available for XXX;如果使用老版本需要添加spring-cloud-netflix-ribbon依赖

  1. 在RestTemplate的Bean上添加注解@LoadBalanced
  2. 在使用restTemplate时,url参数不使用实际的域名和端口,而是使用注册在注册中心的名字
ResponseEntity<ResponseVO> entity =  restTemplate.getForEntity("http://service-user/user/get/1",ResponseVO.class);

负载均衡

指将任务分配到多个操作单元执行

服务器端负载均衡


利用nginx对集群搭建的服务器,通过集群维护一个服务,此时由nginx在服务器端对请求进行负载均衡

客户端负载均衡


当一个客户端需要调用其他客户端时,将被调用方在多个服务器下运行,将任务分到不同操作单元
Ribbon就是客户端负载均衡的工具,使用ribbon可以通过注册中心将请求分配到不同操单元
通过设置运行环境可以实现将服务配置到多个端口下:

-D表示向虚拟机传递参数,后接server.port可以将该服务同时运行到9003端口

OpenFeign(声明式调用)

ribbon调用并不是最好的方式,推荐使用OpenFeign进行声明式调用

  1. 引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 在调用方入口使用注解@EnableFeignClients,表示这个客户端启用声明式调用
  2. 创建一个新接口用于对某一个服务的调用,使用注解@FeignClient(),value是被调用的服务的名称,里面的方法使用springMVC的注解来对应被调用方的方法路径
@FeignClient("service-user")//value参数为被调用方的名称
public interface UserService {@GetMapping("user/get/{id}")//被调用的方法路径ResponseVO getById(@PathVariable Integer id);}
  1. 使用该接口时直接注入
    @Autowiredprivate UserService userService;@GetMapping("getUser2/{id}")public ResponseVO get2ById(@PathVariable Integer id){ResponseVO responseVO = userService.getById(id);return responseVO;}

微服务简介,Euraka,Ribbon,openFeign相关推荐

  1. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  2. SpringCloud微服务简介(一)

    SpringCloud微服务简介(一) Spring Cloud简单认识 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小 ...

  3. 《深入理解 Spring Cloud 与微服务构建》第一章 微服务简介

    <深入理解 Spring Cloud 与微服务构建>第一章 微服务简介 文章目录 <深入理解 Spring Cloud 与微服务构建>第一章 微服务简介 一.单体架构及其存在的 ...

  4. 【云原生微服务八】Ribbon负载均衡策略之WeightedResponseTimeRule源码剖析(响应时间加权)

    文章目录 一.前言 二.WeightedResponseTimeRule 1.计算权重? 1)如何更新权重? 2)如何计算权重? 3)例证权重的计算 2.权重的使用 1)权重区间问题? 一.前言 前置 ...

  5. spring boot入门简介-微服务简介 03

    一,微服务简介 [按: 本文作者为笔者在ThoughtWorks的两位同事James Lewis和老马(Martin Fowler).老马已经邮件许可笔者进行翻译,并要求笔者在译文中提供原文链接和翻译 ...

  6. Spring Cloud微服务简介

    1. 基础知识1 什么是微服务架构? 与单体系统的区别 如何实施微服务? 微服务优缺点 为什么选择Spring Cloud? 微服务技术选型 为什么选择Spring Cloud? Spring Clo ...

  7. SpringCloud微服务,euraka、feign、hystrix组件学习

    SpringCloud 1 eureka 1.1 eureka基本概念 eureka主要包含两个组件:Eureka Server 和 Eureka Client. eureka server(注册中心 ...

  8. 微服务01SpringCloud Eureka Ribbon Nacos Feign Gateway服务网关

    微服务技术栈导学 SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构.这些架构之间有怎样的差别呢? 1.0.学 ...

  9. Spring Boot 入门——Spring Boot 简介||微服务简介

    Spring Boot 入门 1.Spring Boot 简介 Spring Boot来简化Spring应用开发,约定大于配置, 去繁从简,just run就能创建一个独立的,产品级别的应用 简化Sp ...

最新文章

  1. Protoc Buffer 优化传输大小的一个细节
  2. 阿里云企业服务器配置选择教程!
  3. MSSQL同时操作数据加锁问题
  4. TCExam开源在线考试系统
  5. HUST1024 dance party(最大流)
  6. 卖萌屋原创专辑首发,算法镇魂三部曲!
  7. Linux启动脚本rc.local 不执行的解决方法
  8. python中flush什么意思,Python的file.flush()到底在做什么?
  9. 工行U盾出现“没有检测到卡片/PKCS11初始化失败”错误的原因和解决办法
  10. Dynamics CRM 为案例起源设置自定义图标
  11. .net反编译的九款神器
  12. 多变量微积分笔记(3)——二重积分
  13. PVLAN 技术介绍
  14. c语言中用temp程序,e__temp_c语言第02章作业.doc
  15. 日期和身份证年龄计算相关小工具
  16. 国家市场监督管理总局公布《国家标准管理办法》
  17. 2022年最新江西机动车签字授权人模拟试题及答案
  18. LearnGL - 11.1 - 实现简单的Gouraud光照模型 dot 点积/点乘的作用
  19. 结构体的大小如何计算
  20. 如何从卫星图中提取水系数据

热门文章

  1. mysql.server 脚本解析
  2. R语言滞后差分diff()函数
  3. 基于FPGA的交通灯系统
  4. c语言二维图形变换程序,C语言图形编程(五、二维图形变换-01)(国外英文资料).doc...
  5. 2021-01-12 PMP 群内练习题 - 光环
  6. USB转232串口驱动程序
  7. C语言课设选择题标准化考试系统(大作业)
  8. viper4android耳机爆音,利用ViPER4Android FX音效驱动提升耳机音质
  9. 计算机二级office在线练习,全国计算机二级《MS office》练习题及答案
  10. 用HTML+CSS代码写一个3D旋转相册