springcloud项目选题(简述springcloud)
SpringCloudAlibaba(一):概述与重要组件
前一篇提到了我们为什么要替换PHP语言采用Java语言。而Java语言的框架选型上来说有太多的选择,常见的有Dubbo,SpringCloud等。我们选择了SpringCloudAlibaba。替换PHP语言到SpringCloudAlibaba是个大工程,主要是业务迁移部分。讨论之初我也确认过是否迁移原有的业务,得到的明确答复是 迁移 。 那么这么来说也就简单了,复杂的就是工期问题了。
SpringCloud Alibaba是Alibaba结合自身的微服务实践开源的一套微服务全家桶 ,在SpringCloud项目中进行孵化并且毕业。既然是SpringCloud的项目那么阿里云其实包含其商业化的产品。 例如Nacos在阿里云就有其商业化的版本 MSE 。 同时SpringCloud Alibaba的相关组件是经历过双十一大促考验的产品。稳定性较高。
SpringCloud Alibaba是SpringCloud的子项目,其实很多相关的文章都提到了SpringCloud Alibaba与SpringCloud的关系,其中有很多的论点都比较有意思。大家可以去搜索一下。
SpringCloud Alibaba是依赖SpringCloud相关的标准实现的一套微服务的架构。结合阿里巴巴的相关实践与阿里云的相关服务实现的一些组件得以更快的实现相关产品业务。
Nacos实现了服务的配置中心与服务注册发现的功能,Nacos可以通过可视化的配置降低相关的学习与维护成本,实现动态的配置管理与分环境的配置中心控制。 同时Nacos提供了基于http/RCP的服务注册与发现功能。
Sentinel是面向分布式微服务架构的轻量级高可用的流控组件,以流量作为切入点,从流量控制,熔断降级,系统负载保护等维度帮助用户保证服务的稳定性。常用与实现限流、熔断降级等策略。
RocketMQ基于Java的高性能、高吞吐量的消息队列,在SpringCloud Alibaba生态用于实现消息驱动的业务开发,常见的消息队列有Kafka、RocketMQ、RabbitMQ等,相关的比较文档可以自行去翻阅。
既然是微服务的产品,那么肯定会用到分布式事物。Seata就是阿里巴巴开源的一个高性能分布式事物的解决方案。
Dubbo已经在圈内很火了,SpringCloud Alibaba基于上面提到的Nacos服务注册中心也同样整合了Dubbo。
SpringCloud Alibaba还有一些其他的组件选择,例如schedulerX、SMS、OSS等。但是由于其主要是阿里云的商业化产品就不再过多的进行介绍。集成其商业化产品时才能用到。
SpringCloud Alibaba是基于SpringCloud标准由阿里巴巴实现的微服务全家桶,可插拔的方式实现组件的替换,在某些场景中我们需要的组件可以自由进行选择。例如需要分布式链路跟踪我们可以增加sleuth组件用于实现分布式链路跟踪业务等。
很多人提到SpringCloudAlibaba的商业问题,记得当年SpringCloudAlibaba推出第一版的时候我也评论了...卖产品全家桶。不可否认是有那么一些,但是其实它本身的很多组件又不一定非要选择商业版本。这个可以自由进行选择。

SpringCloud之微服务项目搭建-孰能生巧
初门级别搭建SpringCloud 微服务项目
整理网关、认证、redis、其它服务。
项目创建省略
1.1 版本
Springboot 2.2.5 版本
Springcloud版本 Hoxton.SR8
1.2 父工程名
xxx-springcloud-parent
1.3 父工程引入 pom 依赖包
1.4 父工程搭建完毕
二、公共服务搭建
右键父工程依次创建
公共服务主要存放公共资源,例如工具类,实体类等。
2.1 服务命名:xxx-commons
三、注册中心服务
3.1 服务名:xxx-register
3.2 引入依赖包
3.3 application.yml
3.4 启动类:Application
四、客户服务
主要用于一个客户服务模块
服务名称:customer-server
4.1 依赖包
4.2. application.yml
4.2 启动类Application
五、认证中心服务
5.1 服务名:customer-oauth2-server
5.2 引入依赖包
5.3 application.yml
5.4 启动类
六、网关服务
6.1 服务名:customer-gateway
6.2 引入依赖包
6.3 application.yml
6.4. 启动类
6.5 配置白名单实体类
6.6 过滤 filter
7.访问路径
由于配置了网关服务,端口为80
直接访问 地址
8.结束语
主要是通过学习网上视频和百度查找资料整理而来
9.有什么不懂可留言下方,小白相互学习讨论,欧了~
记一次创建springcloud项目(引入lombok和swagger)
1.为了项目的正确运行,必须让所有的子模块使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。在我们项目顶层的pom文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
2.相对于dependencyManagement,如果在父pom文件中中通过dependencies引入jar,将默认被所有的子模块继承。子模块如果希望有自己个性化的内容,可以在子模块中对于其中的某个属性进重新定义。
3.dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)。在实际的项目开发中,推荐在父pom中使用dependencyManagement对项目中使用到的依赖包进行统一的管理。
效果图:
SpringCloud整体构架设计(一)
SpringClound整体核心架构只有一点:Rest服务,也就是说在整个SpringCloud配置过程之中,所有的配置处理都是围绕着Rest完成的,在这个Rest处理之中,一定要有两个端:服务的提供者(Provider)、服务的消费者(Consumer),所以对于整个SpringCloud基础的结构就如下所示:
既然SpringCloud的核心是Restful结构,那么如果要想更好的去使用Rest这些微服务还需要考虑如下几个问题。
1、所有的微服务地址一定会非常的多,所以为了统一管理这些地址信息,也为了可以及时的告诉用户哪些服务不可用,所以应该准备一个分布式的注册中心,并且该注册中心应该支持有HA机制,为了高速并且方便进行所有服务的注册操作,在SpringCloud里面提供有一个Eureka的注册中心。
对于整个的WEB端的构架(SpringBoot实现)可以轻松方便的进行WEB程序的编写,而后利用Nginx或Apache实现负载均衡处理,但是你WEB端出现了负载均衡,那么业务端呢?应该也提供有多个业务端进行负载均衡。那么这个时候就需要将所有需要参与到负载均衡的业务端在Eureka之中进行注册。
在进行客户端使用Rest架构调用的时候,往往都需要一个调用地址,即使现在使用了Eureka作为注册中心,那么它也需要有一个明确的调用地址,可是所有的操作如果都利用调用地址的方式来处理,程序的开发者最方便应用的工具是接口,所以现在就希望可以将所有的Rest服务的内容以接口的方式出现调用,所以它又提供了一个Feign技术,利用此技术可以伪造接口实现。
在进行整体的微架构设计的时候由于牵扯的问题还是属于RPC,所以必须考虑熔断处理机制,实际上所有的熔断就好比生活之中使用保险丝一样,有了保险丝在一些设备出现了故障之后依然可以保护家庭的电器可以正常使用,如果说现在有若干的微服务,并且这些微服务之间可以相互调用,例如A微服务调用了B微服务,B微服务调用了C微服务。
如果在实际的项目设计过程之中没有处理好熔断机制,那么就会产生雪崩效应,所以为了防止这样的问题出现,SpringCloud里面提供有一个Hystrix熔断处理机制,以保证某一个微服务即使出现了问题之后依然可以正常使用。
通过Zuul的代理用户只需要知道指定的路由的路径就可以访问指定的微服务的信息,这样更好的提现了java中的“key=value”的设计思想,而且所有的微服务通过zuul进行代理之后也更加合理的进行名称隐藏。
在SpringBoot学习的时候一直强调过一个问题:在SpringBoot里面强调的是一个“零配置”的概念,本质在于不需要配置任何的配置文件,但是事实上这一点并没有完全的实现,因为在整个在整体的实际里面,依然会提供有application.yml配置文件,那么如果在微服务的创建之中,那么一定会有成百上千个微服务的信息出现,于是这些配置文件的管理就成为了问题。例如:现在你突然有一天你的主机要进行机房的变更,所有的服务的IP地址都可能发生改变,这样对于程序的维护是非常不方便的,为了解决这样的问题,在SpringCloud设计的时候提供有一个SpringCloudConfig的程序组件,利用这个组件就可以直接基于GIT或者SVN来进行配置文件的管理。
在整体设计上SpringCloud更好的实现了RPC的架构设计,而且使用Rest作为通讯的基础,这一点是他的成功之处,由于大量的使用了netflix公司的产品技术,所以这些技术也有可靠的保证。
SpringCloud简单案例
一、服务注册与发现
这里会用到Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
这里的核心内容是服务发现模块:Eureka
创建“服务注册中心”
1.创建基于web的Maven项目(springcloud)
2.创建服务注册中心。在springcloud项目中创建SpringBoot项目(springboot):
勾选Cloud Discovery–Eureka server。以方便导包
3编写springboot项目
3.1查看pom.xml文件
4在启动类上加上注解 如下
通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。这一步非常的简单,只需要在一个普通的Spring Boot应用中添加这个注解就能开启此功能,比如下面的例子:
5 修改application.yml文件
yml文件的好处,天然的树状结构,一目了然
---#端口号server: port: 8760eureka: instance: hostname: localhost client:# eureka.client.registerWithEureka :表示是否将自己注册到Eureka Server,默认为true。# 由于当前这个应用就是Eureka Server,故而设为falseregister-with-eureka:false# eureka.client.fetchRegistry :表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,# 不需要同步其他的Eureka Server节点的数据,故而设为false。fetch-registry:falseservice-url:# eureka.client.serviceUrl.defaultZone :设置与Eureka Server交互的地址,#查询服务和注册服务都需要依赖这个地址。默认是defaultZone: http:// {server.port}/eureka/
6 启动项目后访问
可以看到下面的页面,其中还没有发现任何服务:
7.搭建服务端(生产者)
创建springBoot项目同上
查看pom.xml文件
?xml version="1.0"encoding="UTF-8"?4.0.0org.springframework.bootspring-boot-starter-parent2.1.3.RELEASEcom.handproducer0.0.1-SNAPSHOTproducerDemo project for Spring Boot1.8Greenwich.RELEASEorg.springframework.cloudspring-cloud-starter-netflix-eureka-serverorg.springframework.bootspring-boot-starter-testtestorg.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimportorg.springframework.bootspring-boot-maven-pluginspring-milestonesSpring Milestones
8修改application.yml文件
注:端口不能与上面的相同。这里的服务name:service-hi 可以根据自己情况定义。
---server: port:8762eureka: client: service-url: defaultZone: : application: name: service-producer
9 编写启动类
packagecom.hand.producer;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.netflix.eureka.EnableEurekaClient;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;@SpringBootApplication@EnableEurekaClient@RestControllerpublicclassProducerApplication{publicstaticvoidmain(String[] args){ SpringApplication.run(ProducerApplication.class, args); }@Value("${server.port}") String port;@RequestMapping("/hi")publicStringhome(@RequestParam String name){return"hi "+ name +",i am from port:"+ port; }}
运行服务
然后查看
可以看到,我们定义的服务被注册了。如下图所示:
9.创建消费者
9.1 创建消费者modul,流程如上述工程创建流程。
9.2查看pom.xml文件
?xml version="1.0"encoding="UTF-8"?4.0.0org.springframework.bootspring-boot-starter-parent2.1.3.RELEASEcom.handcustomer0.0.1-SNAPSHOTcustomerDemo project for Spring Boot1.8Greenwich.RELEASEorg.springframework.cloudspring-cloud-starter-netflix-eureka-serverorg.springframework.bootspring-boot-starter-testtestorg.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimportorg.springframework.bootspring-boot-maven-pluginspring-milestonesSpring Milestones
10 yml配置
---server: port:8763eureka: client: service-url: defaultZone: : application: name: service-customerfeign: hystrix: enabled :true
11 编写启动类
@EnableDiscoveryClient表明标注类是消费者,加入restTemplate以消费相关的服务
packagecom.hand.customer;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;importorg.springframework.cloud.client.loadbalancer.LoadBalanced;importorg.springframework.context.annotation.Bean;importorg.springframework.web.client.RestTemplate;@SpringBootApplication@EnableDiscoveryClientpublicclassCustomerApplication{publicstaticvoidmain(String[] args){ SpringApplication.run(CustomerApplication.class, args); }@Bean@LoadBalancedRestTemplaterestTemplate(){returnnewRestTemplate(); }}
12 .创建service和controller
12.1 service层
packagecom.hand.customer.controller;importcom.hand.customer.service.HelloService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;packagecom.hand.customer.service;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.web.client.RestTemplate;/**
*/@ServicepublicclassHelloService{@AutowiredRestTemplate restTemplate;publicStringhiService(String name){returnrestTemplate.getForObject(" "+ name, String.class); }}
12.2 controller层
packagecom.hand.customer.controller;importcom.hand.customer.service.HelloService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;/**
*/@RestControllerpublic class HelloControler { @AutowiredHelloService helloService; @RequestMapping(value="/hi") public String hi(@RequestParam String name) {returnhelloService.hiService(name); }}
再次查看服务
在浏览器中输入
链接:
基于SpringCloudAlibaba货币交易系统项目
项目简介
开源数字货币交易所,基于Java开发的比特币交易所,包含BTC交易所、ETH交易所、数字货币交易所、交易平台、撮合交易引擎等核心模块。项目技术采用业界最流行、社区非常活跃的开源组件Spring Cloud Alibaba来构建我们的交易系统,是行业第一家基于Alibaba技术的大型项目,也是Spring Cloud的最佳实践之一。
学习完本项目,大家将对云架构、区块链、法定数字货币、金融科技以及货币发展有自己更深入的认识和理解,为以后20年中国CDBD的研究和发展作出自己的贡献,同时也为争取40w的年薪增加一份可靠的技术保障!
适合对象
在职程序员的自我提升
有Spring Cloud/Spring Cloud Alibaba基础的学员
有Vue/React的基础的学员
有k8s/Docker运维基础的学员
技术选型
Spring Cloud Alibaba + Spring Boot + Tio + Jenkins + Maven + Jetcache + Disruptor + Redis + RocketMQ + Mongodb + Jenkins + Docker + Kubernetes
解决方案
核心功能模块
后台管理系统
前台系统
项目截图
后台管理系统
前台系统
项目架 构
撮合引擎