您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

SpringCloud开发框架入门知识

时间:2020-09-14 13:38:50  来源:  作者:

1.分布式开发简介

  1. 分布式开发的思考点:如何可以让代码更安全;如何有效的通讯;

在进行分布式处理的时候如何进行程序功能划分;

  1. web集群:考虑多用户并发访问的处理速度

业务中心:在进行一些庞大的项目设计过程之中,应该有更加完善的业务处理,这样所有的客户端(服务器),用这些业务中心的操作就可以完成具体的功能。

数据库集群:解决了数据的存储问题,以及数据的分片管理。

对于分布式的项目开发按照历史的发展经历过如下的一些技术:

CORBA:公共对象请求代理架构,它是一种开发的标准,而且也是许多语言都支持的开发标准。

RMI(远程方法调用):该技术是sun提出的,该技术出现的最大特征是希望可以与CORBA进行市场的竞争,于是这技术出现时,很多公司不认可这些技术。

SpringCloud开发框架入门知识

 

2、RMI实现方案

用户->接口(存根)->接口及实现类(骨架)

发现RMI很好用,单不如CORBA广泛。后基于CORBA设计了RMI-IIOP协议,这个协议应用在了EJB上。

3.EJB思想

用户->WEB容器->EJB容器(WebSphere、WebLogic、JBoss)

优秀的理论,糟糕的实现。后因XML的出现,基于XML作为交互语言的WebService登场了。

4.Web服务及Soa服务思想

1、.Net 与JAVA通过SOAP协议相互调用(WebService=XML+SOAP).

2、WebService技术开发,存在如下问题:

速度太慢了;

想要采用远程接口方式调用,就要利用开发工具生成一堆工具类代码;

3、基于上述SOA思想出现,即将所有的服务统一管理起来,就成了服务总线,那么所有的开发者直接调用里面的服务就完成一些功能。后来又不断出现了许多的RPC开发技术,其中国内具有代表性的dubbo开发技术,不过成长最快的Rest,因为JSON的广泛引用,就如同最初XML技术造就了WebService,JSON造就了Rest服务;

利用Rest进行RPC技术实现,这样的操作速度很快,而且占用的带宽要少,SpringCloud就将整个Rest作为了RPC实现技术,并且这一技术已经开始出现现有行业的统一之势。而且Spring Cloud依照Spring Boot开发技术,可以实现项目的打包发布以及单独运行,这一点符合当前云时代的开发要求。

5.微服务的缺点

SpringCloud整体核心架构只有一点:Rest服务,也就是说在整个SpringCloud配置过程之中,所有的配置处理都是围绕着Rest完成的,在整个Rest处理之中,一定要有两个端:服务的提供者(Provider)及服务的消费者(Consumer),所以对于整个SpringCloud基础结构就是如下所示:

用户-反向代理-Web微服务-(Restful即服务地址:端口)-微服务提供者

微架构缺点:只有业务层才能规划为微架构,

REST指的一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。满足这些约束条件和原则的应用程序或设计就是 RESTful。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

SpringCloud开发框架入门知识

 

6.Feign-robbon-Eureka-Hystrix熔断处理机制

客户端(WEB)-注册中心-业务层-数据层-MySQL

Web端通过Nginx实现负载均衡,业务端通过在Eureka注册中心之中进行注册,通过robbon进行业务端负载均衡配置。通过feign伪造接口实现,将robbon伪造为接口。Hystrix熔断处理机制,保证某一个微服务即使出现了问题,依然可以正常使用。(原理为某个微服务出现问题,返回定义好的错误信息,而不是报错或无返回)

Feign-robbon-Eureka-Hystrix熔断处理机制

7.Zuul代理机制:

客户端-调用微服务X(RPC前端/springBoot)-Rest(zuul代理)-调用微服务X(RPC后端SpringCloud)-数据层-数据库。

通过Zuul代理的用户只需要知道指定路由的路径,就可以访问指定微服务信息,这样更好的体现了java中的“key=value”的设计思想,而且所有的微服务Zuul进行代理。

springCloud设计的时候提供有一个SpringCloudConfig程序组件,利用这个组件就可以直接基于GIT或SVN来进行配置文件的管理。

springBoot-zuul代理及Eureka注册服务-可通过GitHup管理的Config及微服务。

在整体设计上SpringCloud更好的实现了RPC架构,而且使用了Rest作为通讯的基础,且大量使用的netfix公司的产品技术,这些技术也有了可靠的保证。

8.Restful基础架构配置项目开发环境

对于rest基础架构实现处理是Springcloud核心所在。

创建一个microcloud的整体父pom项目,将创建三个子模块: microcloud-api子模块,作为公共的信息导入配置模块; microcloud-provider-dept-8001作为服务提供者,该提供者负责使用Mybatis与数据库的交互;

Microcloud-consumer-80:作为微服务调用的客户端使用。

  1. 创建一个新的maven项目:microcloud;
  2. 修改pom.xml文件,主要追加spring boot及Spring cloud两个开发包的依赖关系;

Ps:springCloud离不开springBoot,所以需要配置此依赖包。

  1. microcloud-api 建立一个api的公共模块,该模块的主要功能是提供有公共处理类,本次预计建立一个Dept数据表,里面的字段:

Deptno(long)、dname(String)、dbname(保存的数据库的名字)

  1. microcloud-provider-dept-8001

创建一个Rest提供者的项目模块,在这个模块主要定义要使用的数据库脚本;

由于在整个微服务里面需要进行负载均衡操作,所以我们本次在使用的时候加入了数据库的名称信息。

 

9.创建Dept微服务:

所谓微服务的核心本质就是JSON的传输,那么既然现在要求使用Mybatis进行数据库操作,所以应该在项目里面配置Druid的数据库连接池,而后对外进行项目的发布。

①microcloud-provider-dept-8001:修改pom.xml配置文件,追加相关的依赖程序支持包。

②microcloud-provider-dept-8001:创建IDeptDAO数据操作接口,这个接口里面将提供有三个数据操作方法。

③microcloud-provider-dept-8001:修改Application.yml配置文件,追加mybatis和服务的相关配置信息;

④microcloud-provider-dept-8001:定义src/main/resources/mybatis/mybatis.cfg.xml配置文件:

⑤microcloud-provider-dept-8001:修改src/main/resources/mybatis/mapper/cn/mldn/Dept.xml配置文件;

⑥microcloud-provider-dept-8001:建立IDeptService接口,做业务实现:

⑦microcloud-provider-dept-8001:定义接口的运行主类。

⑧microcloud-provider-dept-8001:进行业务接口测试编写。

⑨microcloud-provider-dept-8001:建立DeptRest服务类。

@Controller

Public class DeptRest{

@ResquestMapping(value=“dept/get”,method=RequestMethod.GET)

Public Dept get(){

Return xx;

}

}

  1. 修改hosts配置文件,追加一个映射路径。

(C:windowsSystem32driversetchosts)

追加“127.0.0.1 dept-8001.com”

  1. 观察Rest服务能否正常提供;

调用get操作;dept-8001.com:8001/dept/get/1;

调用list操作;调用add操作。

 

10.客户端调用微服务:

  1. 创建一个Maven的新的模块:microcloud-consumer-80
  2. microcloud-consumer-80:修改application.yml配置文件:

Server:

port:80

  1. microcloud-consumer-80:创建一个Rest的配置程序类,主要进行RestTemplate类对象创建。

@Configuration

Public class RestConfig{

@Bean

Public RestTemplate getRestTemplate(){

Return new RestTemplate();

}

}

  1. microcloud-consumer-80:创建一个控制器,为了简化处理,本次不再进行页面定义,所有服务结果都使用REST返回。
  2. 编写启动程序类
  3. 修改hosts配置文件,追加访问控制路径。

127.0.0.1 client.com

7、进行代码测试调用

调用数据返回任务:http://client.com/consumer/dept/get?id=1?

 

SpringCloud开发框架入门知识

 

11.1Rest提供者安全访问:

所有Rest服务最终都是暴露在公网,Rest访问,安全性是首要因素。

11.1配置安全验证

如果要想进行安全的验证处理,那么首先一定要先在服务提供方进行处理。

  1. 【microcloud-provider-dept-8001】修改pom.xml配置文件,追加SpringSecurity相关依赖包引入;

如果你现在配置了安全框架,则在启动时会出现如下提示信息:

Using default security password:73df5......

  1. Rest提供者安全访问配置

security:

Basic:

Enabled:true #启用springSecurity的安全配置项。

User:

name:mldnjava #认证用户名

password:hello #认证密码

role: #授权角色

随后在项目之中访问Rest服务接口http://client.com/consumer/dept/get?id=1?,此时在访问的时候会要求用户输入用户名与密码,这个时候有一个更简化方法进行内容的输入:http://mldnjava:hello@client.com/consumer/dept/get?id=1?

11.2SpringSecurity安全访问介绍

在安全的开发之中,对于Rest服务提供者不可能被用户直接访问的,所以肯定需要一个rest客户端springboot进行调用,可是现在Rest提供者的服务上有了认证信息,那么该如何访问呢?

如果这个时候在Rest客户端上直接使用用户名和密码做加密处理,那么根本无法访问,此时会出现有401的错误代码,因为认证出现了错误。是因为所有的认证的处理操作,应该以头信息的模式进行处理。而后使用base64进行加密处理后才可以得到一个正确的访问路径。

  1. 【microcloud-consumer-80】修改RestConfig配置类,在这个配置类上追加有新的bean配置项;
  2. 【microcloud-consumer-80】修改ConsumerDeptController配置类,在进行Rest访问的时候设置好这个头部的信息。

HttpHeaders headers = new HttpHeaders();

String auth=“user:password”

byte[] encodeAuth =Base64.getEncoder().encode(auth.getbytes(Charset.forName(“US-ASCII”)))

String authHeader = “basic ”+ new String(encodeAuth);

headers.set(“Authorization”,”authHeader”);

在进行授权的头信息内容配置的时候加密的信息一定要与“Basic ”之间有一个空格。

对于rest而言,在spring课程讲过,里面如果进行参数的传递,有各自方式,例如:各种页面的路径信息组成,如果要是传递复杂内容,建议你在整个处理的时候就去使用那些页面的参数传递模式。

11.3 无状态Session/rest配置

整个Rest项目中的一个问题所在,所有的Rest都是基于Http协议的应用,这种应用上所有的web容器一般都会提供有一个Session机制,也就是说每一个用户访问之后,如果该用户一直连接,则认为该用户一直被服务器保存状态,但微服务有可能并发访问几W或几十W人,那么如果所有的Session状态都被维护着?

  1. 【microcloud-provider-member-8001】现在修改Rest程序类,追加一个取得session id的方法

request.getSession().getId();

随后进行提供者的Rest连接访问,http://mldnjava:hello@dept-9=8001.com:8001/dept/sessionId:

  1. 在一个springCloud配置之中,默认是会保存有session状态的,而后如果用户有需要则可以根据“sessionCreationPolicy”枚举类进行不同的session状态设置,但是从整体的操作来说session最好设置为无状态(服务端不保存你的session状态)。

application.yml配置文件

Security:

Session:always(保存状态,服务器内存可能被占满)

Stateless(无状态)

不管你以后的项目或者支持类中是否有设置的无状态的问题,你最好都进行一下设置,否则你的Rest服务将受到严重的内存困扰,最严重的就是内存溢出。

 

12.定义安全配置程序类

在进行Rest服务开发的时候,为了保证安全所有的程序里面都需要进行Spring-Security安全认证处理,可是之前所进行的认证处理都是在application.yml配置文件完成的,这样配置明显不符合逻辑,如果你需要开发的微服务很多,这些微服务都要求使用统一的用户名和密码的时候就非常不方便了。所以现在最简单的做法是进行统一的设置。

  1. 创建一个microcloud-security的Maven模块
  2. 【microcloud-security】修改pom.xml配置文件
  3. 【microcloud-security】建立一个统一的安全配置类:

WebSecurityConfig extends WebSecurityConfigurerAdapter{

Public void config(HttpSecurity http)

{

//表示所有访问都必须进行认证处理后才能正常进行

http.httpBasic().add().authorizeRequest().anyRequest().fullyAuthenticated();

//所有的Rest服务一定要设置为无状态,以提升操作性能。

http.sessionManager().sessionCreationPolicy(SessionCreation.Policy.STATELESS);

}

}

  1. 【microcloud-provider-member-8001】修改pom.xml配置文件,引入安全配置模块

<dependency>

<groupId>cn.mldn<groupId>

<artifactId>microcloud-security<artifactId>

<dependency>

5、【microcloud-provider-member-8001】删除掉application.yml中与安全有关的配置项。

security:

Basic:

Enabled:true #启用springSecurity的安全配置项。

User:

name:mldnjava #认证用户名

password:hello #认证密码

role: #授权角色

 

由于现在所写的安全处理类是在程序启动类的子包之中,应该可以自动扫描到。

6访问地址:http://mldnjava@hello@dept-8001.com:8001/dept/sessionId



Tags:SpringCloud   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、Feign简介Feign是一种声明式、模板化的HTTP客户端。使用Feign,可以做到声明式调用。尽管Feign目前已经不再迭代,处于维护状态,但是Feign仍然是目前使用最广泛的远程调用框架...【详细内容】
2021-06-29  Tags: SpringCloud  点击:(113)  评论:(0)  加入收藏
Jenkins 是目前最常用的持续集成工具,拥有近50%的市场份额,他还是很多技术团队的第一个使用的自动化工具。由此可见他的重要性!这份Jenkins宝典从入门介绍到结合Docker+SpringC...【详细内容】
2021-06-09  Tags: SpringCloud  点击:(145)  评论:(0)  加入收藏
环境:Spring Boot 2.3.9 + Spring Cloud Hoxton.SR8服务发现注册请参考《SpringCloud Zookeeper服务发现及负载均衡 》zookeeper安装配置请参考《Kafka(zookeeper)环境配置超级...【详细内容】
2021-04-06  Tags: SpringCloud  点击:(276)  评论:(0)  加入收藏
本文将详细分析SpringCloud Gateway是如何实现的。架构SpringCloud Gateway(下面简称SG)基于SpringWebFlux,整体架构如下图所示: SG定义了几个概念: 路由(Route):路由是网关的基本...【详细内容】
2020-12-18  Tags: SpringCloud  点击:(583)  评论:(0)  加入收藏
前言当我们的网关Gateway程序开发完成之后,需要部署到生产环境,这个时候你的程序不能是单点运行的,肯定是多节点启动(独立部署或者docker等容器部署),防止单节点故障导致整个服...【详细内容】
2020-10-19  Tags: SpringCloud  点击:(101)  评论:(0)  加入收藏
消息总线的定义前面在1.4.2节中强调过,在微服务架构中,经常会使用REST 服务或基于消息的通信机制。在3.6节中也详细介绍了消息通信的实现方式。消息总线就是一种基于消息的通...【详细内容】
2020-09-29  Tags: SpringCloud  点击:(140)  评论:(0)  加入收藏
1.分布式开发简介 分布式开发的思考点:如何可以让代码更安全;如何有效的通讯;在进行分布式处理的时候如何进行程序功能划分; web集群:考虑多用户并发访问的处理速度。业务中心:在...【详细内容】
2020-09-14  Tags: SpringCloud  点击:(52)  评论:(0)  加入收藏
常见微服务的消费者本节就常见的微服务的消费者进行介绍。在Java领域比较常用的消费者框架主要有HttpClient、Ribbon、Feign 等。 Apache HttpClientApache HttpClient是Apa...【详细内容】
2020-09-11  Tags: SpringCloud  点击:(129)  评论:(0)  加入收藏
使用SpringCloud技术栈搭建微服务集群,可以选择的组件比较多,由于有些组件已经闭源或停更,这里主要选用spring-cloud-alibaba作为我们的技术栈。 服务注册与发现: nacos-discove...【详细内容】
2020-08-19  Tags: SpringCloud  点击:(204)  评论:(0)  加入收藏
很多程序员每项技术单独拿出来有可能很厉害,例如:springcloud、springboot、redis、nginx、mysql、rabbitMq等,但是普遍缺乏将所有的这些技术整合到一起,从前端到后端,从开发到部...【详细内容】
2020-07-08  Tags: SpringCloud  点击:(111)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(11)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(26)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(55)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条