GithubHelp home page GithubHelp logo

spring-cloud-demo's Introduction

Spring Cloud入门实例

1、SpringCloud与微服务介绍

1.1 什么是微服务?
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户 提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP 的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另 外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、 工具对其进行构建。

1.2 SpringCloud
SpringCloud是微服务框架,是spring旗下的项目之一。其核心**就是分布式应用,专门为高并发、高负载、高 可用(即所谓的三高系统)而生。其**同大数据技术的分布式计算概念相同,将真正的分布式技术引入web系统 中,达到可伸缩、可配置、持续集成、无缝整合的目的。是当下web开发领域中非常火热的开发技术。其主要涉及 配置管理、服务发现、智能路由、负载均衡、熔断处理、控制总线、集群状态管理等等功能。核心组件包括 netflix、zuul、ribbon、feign和hystrix。

简而言之,SpringCloud是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微 服务全家桶。

2、SpringCloud与SpringBoot关系

SpringBoot专注于快速方便的开发单个个体微服务。 SpringCloud是关注全局的微服务协调、整理、治理的框架,它将SpringBoot开发的单体整合并管理起来。 SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。

3、项目模块功能说明

(1)eureka-client: Eureka客户端服务,用来注册服务到Eureka服务端。

(2)eureka-server: Eureka服务端服务(注册中心)服务都需要在该中心进行注册。

(3)file-upload: 实现文件上传

(4)form-submit: 实现表单提交

(5)hystrix-consumer-reading:
(6)hystrix-server-bookstore:
SpringCloud熔断器机制实现,使用Hystrix组件实现服务的熔断,防止因某个服务出现故障,导致服务级联调用而引发雪崩问题。

  • 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情 况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可 用,并将不可用逐渐放大的过程。
  • 熔断器的原理很简单,如同电力过载保护器。它可以实现快速失败,如果它在一段时间内侦测到 许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可 能会失败的操作,使得应用程序继续执行而不用等待修正错误,或者浪费CPU时间去等到长时间的超时产生。熔断 器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。
  • 熔断器模式就像是那些容易导致错误的操作的一种代理。这种代理能够记录最近调用发生错误的次数,然后决定使 用允许操作继续,或者立即返回错误。熔断器就是保护服务高可用的最后一道防线。
  • 断路器很好理解, 当Hystrix Command请求后端服务失败数量超过一定比例(默认50%), 断路器会切换到开路状态 (Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态一段时间后(默认5秒), 自动切换 到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否 则重新切换到开路状态(OPEN). Hystrix的断路器就像我们家庭电路中的保险丝, 一旦后端服务不可用, 断路器会直接 切断请求链, 避免发送大量无效请求影响系统吞吐量, 并且断路器有自我检测并恢复的能力.
  • Netflix的Hystrix库提供了熔断模式的实现:当对方法进行熔断处理时, Hystrix 会监控方法的失败调用,如果失败 次数达到阈值,Hystrix就打开熔断以致后续访问自动失败。熔断开启后,Hystrix把对方法的调用重定向到特定回调 方法中。
  • Spring Cloud Netflix Hystrix会查找加了@HystrixCommand注解的方法,并使用代理模式对该方法进行包装,该 代理会连接到熔断器以便Hystrix能够监控。当前只对标记了@Component和@Service注解的类有效。

(7)jpa-data-demo: 与jpa集成
(8)mysql-data-demo: 与MySql集成
(9)redis-demo: 与Redis集成
(10)ribbon-consumer-user:
(11)ribbon-consumer-user1:
(12)ribbon-consumer-user2:
Ribbon实现客户端负载均衡功能,Ribbon是一个内置于消费者(客户端)的负载均衡器,能够对服务提供者发起调用时,实现负载均衡的处理。
客户端访问服务器提供者方式有三种:

  • 直接访问:直接对服务提供者发起调用,没有负载均衡的能力和容错保证。
  • 自己维护服务地址列表: 编程效率低,手动维护成本。
  • 通过eureka注册中心进行查找: 推荐使用eureka注册中心查找,实现透明目的。

(13)ribbon-say-hello: ribbon实现负载均衡

(14)zuul-book: 智能网关服务

  • Spring cloud Zuul会自动设置路径到applicaiton name上。由于我们设置了zuul.routes.books.url,Zuul将会代 理/books请求给该地址。
  • Zuul使用Ribbon来执行客户端负载均衡,并且默认Ribbon使用Eureka发现服务。这里我们跳过服务发现,因此设 置ribbon.eureka.enabled为false。因此,Ribbon现在不使用Eureka发现服务,必须手动指定一个BookService 的url。

(15)zuul-gateway:

  • Zuul是服务器端的负载均衡组件,能够对请求进行路由和过滤处理,主要对请求进行转发,根据相应的规则引擎转 发给后端的相应服务。

过滤器是过滤请求的。
zuul过滤器有四中过滤类型:

  • pre 路由请求前执行。
  • route 处理实际的路由请求。
  • post 在请求路由完成后执行。
  • error 处理请求期间出现错误执行。

spring-cloud-demo's People

Contributors

javacodemood avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

spring-cloud-demo's Issues

redis-demo 模块启动异常,其余14个模块启动正常

  1. 我在启动redis-demo模块时遇到异常,貌似是MessageListenerAdapter导入了错误的包,请问这个问题如何解决?

以下是部分启动日志:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-05-11 15:38:51.375 ERROR 3887 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of method container in com.lhf.springcloud.BeanConfig required a bean of type 'org.springframework.data.redis.listener.adapter.MessageListenerAdapter' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.data.redis.listener.adapter.MessageListenerAdapter' in your configuration.


Process finished with exit code 1
  1. 建议完善Readme文件,如版本号、DB建表脚本

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.