《微服务架构基础 Spring Boot+Spring Cloud + Docker》学习笔记

之前写了一篇博文,介绍得太片面,后面觉得文章写得太水了,就重新把书看了一遍,将书上前5章的代码一一实现。这篇文章主要介绍微服务架构,后面会在写一篇介绍docker。

全书将搭建了一个使用Spring Cloud一系列的架构,没有深层次的业务,只有两个简单的方法。涉及到每个技术点都有讲解,读完会对微服务会大致有印象。对Spring Cloud深入了解需要到官网查看文档:https://cloud.spring.io/spring-cloud-static/Greenwich.RELEASE/single/spring-cloud.html。总的来说是一本不涉及较深知识点的工具书,读完后自己实现一个或把源码拿来看还是有所收获的。

项目架构图如:

《微服务架构基础 Spring Boot+Spring Cloud + Docker》学习笔记_第1张图片

前言

全书共分为四部分:第一部分“微服务概述”,主要讲解微服务的由来、概念、特点和微服务架构等;第二部分“微服务的开发”,主要讲解微服务开发框架Spring Boot的使用;第三部分“微服务架构的构建”,主要讲解如何使用Spring Cloud的相关组件来构建微服务架构;第四部分“微服务的部署”,主要讲解Docker技术,以及如何在Docker中部署微服务项目。

主要技术点:Spring Cloud Eureka实现服务发现;Spring Cloud Ribbon实现客户端负载均衡;Spring Cloud Hystrix 实现微服务架构中的服务容错保护;Spring Cloud Zuul实现API网关服务;Spring Cloud Config实现分布式配置管理;Docker Swarm 的集群;Jenkins完成微服务的自动化部署;Docker Comopse编排工具

 

部分知识点和代码

Eureka 服务注册中心

心跳默认30s,3次失败后移除服务

《微服务架构基础 Spring Boot+Spring Cloud + Docker》学习笔记_第2张图片

出现警告

因为本地调试触发Eureka Server自我保护机制。注册中心维护的实例不是很准确,本地开发,在配置文件使用eureka.server,enable-self-perservation= false关闭保护机制,确保将不可用实例正确删除。

Eureka启动类,@EnableEurekaServer注解服务端,@EnableEurekaClient注解客户端

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

 

Ribbon 客客户端负载均衡

分布式架构中,客户端的同一个实例在多个应用上使用Ribbon实现。@LoadBalanced 加在 Rest template 上就具有负载均衡。用户服务查询订单服务,订单服务实现了负载均衡(需要多个订单实例)。工作时:1.优先选择同一区域且负载较少的server;2.根据指定策略从server取到服务注册列表中选择一个地址。

 /**
    * 实例化RestTemplate
    * RestTemplate是Spring提供的用于访问Rest服务的客户端,
    * 它提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
    */
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
   return new RestTemplate();
}

使用例子
    /**
     * 查找与用户相关的订单
     */
   @GetMapping("/findOrdersByUser/{id}")
   public String findOrdersByUser(@PathVariable String id) {
      // 假设用户只有一个订单,并且订单id为123
      int oid = 123;
      return this.restTemplate
         .getForObject("http://microservice-eureka-order/order/" + oid, String.class);
   }

 

Hystrix 断路器

《微服务架构基础 Spring Boot+Spring Cloud + Docker》学习笔记_第3张图片

 

《微服务架构基础 Spring Boot+Spring Cloud + Docker》学习笔记_第4张图片

 

使用@Hystrixcommand注解配置错误回调方法

@GetMapping("/findOrdersByUser/{id}")
@HystrixCommand(fallbackMethod = "fallbackInfo")
public String findOrdersByUser(@PathVariable String id) {
   // 假设用户只有一个订单,并且订单id为123
   int oid = 123;
   return this.restTemplate
      .getForObject("http://microservice-eureka-order/order/" + oid, 
            String.class);
}
/**
 * 返回信息方法
 */
public String fallbackInfo(@PathVariable String id){
   return "服务不可用,请稍后再试!";
} 

 

Hystrix Dashboard 图形化数据监控

访问地址:http://localhost:8030/hystrix.stream

核心配置:@EnableHystruxDashboard 数据监控和图形化界面

指标含义:https://github.com/Netfix/Hystrix/wiki/Dashboard

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

 

zuul Api服务网关

zuul启动类,多@EnableZuulProxy注解

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

 

会将注册到Eureka的服务自动映射出来,只需要配置一个

单独使用Zuul:应用本身占用8050端口,访问 http://localhost:8050/order-url/** 该路径会被路由到http://localhost:7900/

server:
  port: 8050 # 指定该Eureka实例的端口号
spring:
  application:
    name: microservice-gateway-zuul # 指定应用名称
zuul: 
  routes:
    order-url: 
      path: /order-url/**
      url: http://localhost:7900/ 
#    prefix: /myapi 前缀

Spring Cloud Config

主要用于分布式系统的外部配置提供服务器(Config Server)和客户端(config Client)支持;

服务端:分布式配置中心,独立的微服务应用,集中管理各个环境下的配置,默认使用git存储、可使用svn,或者本地。客户端时微服务架构中的哥哥微服务应用,通过配置中心管理应用资源配置内容。

《微服务架构基础 Spring Boot+Spring Cloud + Docker》学习笔记_第5张图片

 

@EnableConfigServer注解标识服务端,服务端有所有的配置

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

服务端配置

spring:
  application:
    name: microservice-config-server
#  profiles:
#    active: native   # 使用本地文件系统的存储方式来保存配置信息
  cloud:
    config:
      server:
        git: # 使用git的方式
          uri: https://gitee.com/secret8/microservice-study-config.git
server:
  port: 8888

客户端有@RefreshScope用于刷新 http://localhost:8801/refresh可刷新(post方法)

@SpringBootApplication
@RefreshScope
@RestController
public class Application {
   @Value("${clientParam}")
   private String clientParam;
   
   @RequestMapping("/clientParam")
   public String getParam(){
      return this.clientParam;
   }
   
   @RequestMapping("/hello")
    public String hello(){
       return "hello world";
    }
   public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
   }
}

客户端配置

spring:
  application:
    name: microservice-config-client
  cloud:
    config:
      profile: prod # 配置服务中的{profile}
      uri: http://localhost:8888/  # 配置中心的地址
server:
  port: 8801

 

各种地址

微服务源代码 链接: https://pan.baidu.com/s/1FO9dgYRiBJ94J8ICvBpx-A 密码: aeut (找传智博客的客服要的,只有前5章,后面的基本是docker操作和服务部署知识)

PDF链接:https://pan.baidu.com/s/1p2iDNSQ4livEoauYlmGxKg 提取码:4mcn (网上找的,我看的当当云阅读的电子版,无法分享,可以赠送)

 

你可能感兴趣的:(java,微服务,Spring,Cloud)