Spring Boot微服务之入门
1.微服务的相关介绍
优点:
(1) 它解决了复杂性问题。它将单体应用分解为一组服务。
(2) 这种体系结构使得每个服务都可以由专注于此服务的团队独立开发。
(3) 微服务架构可以使每个微服务独立部署。
(4) 微服务架构使得每个服务都可独立扩展。
缺点:
(1) 微服务强调了服务大小,但实际上这并没有一个统一的标准。业务逻辑应该按照什么规则划分为微服务,这本身就是一个经验工程。
(2) 微服务的另一个主要缺点是微服务的分布式特点带来的复杂性。
(3) 微服务的另一个挑战是分区的数据库体系和分布式事务。
(4) 微服务架构对测试也带来了很大的挑战。
(5) 微服务的另一大挑战是跨多个服务的更改。
(6) 部署基于微服务的应用也要复杂得多。
基础设施:
- 服务治理
- 配置管理中心
- 网关
- 服务容错
- 服务消费者
- 消息中间件
- 分布式服务追踪
- 安全
- 微服务测试
1.第12章 Spring Boot与微服务
2.常用的微服务架构都有哪些?如何选用?
3.Spring Cloud Alibaba | Dubbo 与 Spring Cloud 完美结合
4.alibaba/spring-cloud-alibaba
5.一篇文章快速理解微服务架构
6.表1-1术语表 (其实从术语表中,可以认识到很多的东西,先了解大概的概念,就能知道如何才能入手了。)
2.使用springboot cloud alibaba
下载Nacos,运行Nacos。
1.Spring Cloud Alibaba基础教程第一篇:使用Nacos实现服务注册与发现
2.Nacos Spring Cloud 快速开始
3.什么是 Nacos
4.Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现 (这一篇和第一篇是一样的,我觉得这篇可能是原创)
3.新建maven程序
新建一个空的maven程序,编写pom.xml,其中bigdata,是我模块的名字。
1 |
|
4.新建两个子模块
(1) 新建模块这里,其实和新建springboot应用程序差不多,只不过在选择Module。模块的pom中,添加父类的pom引用
1 | <parent> |
(2) 修改模块的application.propreties文件,添加配置服务名称和nacos注册地址
1 | spring: |
(3) 主类上添加@EnableDiscoveryClient注解
5.调用服务
新建了两个子模块之后,使用上面的方法配置服务发现,配置application.yml之后,在需要调用服务的地方编写下面的代码:
1 |
|
1.[踩坑] Nacos服务注册地址为内网IP的解决办法
2.spring cloud微服务之间的调用 主要讲了RestTemplate方式调用微服务的三种方式,包括了使用 LoadBalancerClient 注解的方式进行。
3.Client-Side Load-Balancing with Spring Cloud LoadBalancer 官方的使用 Load-Balancing 进行服务调用的例子。
4.SpringCloud LoadBalancerClient实现负载均衡以及自定义负载策略(一个或多个) 本章主要来具体实现怎样使用LoadBalancerClient实现负载均衡。springcloud提供的组件Ribbon,内部就是集成了LoadBalancerClient负载均衡,通过@LoadBalance注解开启负载均衡器。
6.微服务和分布式的区别
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。
问题
(1) Field loadBalancerClient in com.proheng.phzsjm.task.AlarmTask required a bean of type ‘org.springframework.cloud.client.loadbalancer.LoadBalancerClient’ that could not be found。Consider defining a bean of type ‘org.springframework.cloud.client.loadbalancer.LoadBalancerClient’ in your configuration。
这里显示就是LoadBalancedClient无法注入的问题,
【尝试】
我尝试了很多的方法:
1.排除了若依系统自带的一些依赖包
2.重启了idea
3.修改了模块中父pom.xml的依赖,指向了 spring-boot-starter-parent,结果出现了 java.lang.NoClassDefFoundError: org/springframework/boot/Bootstrapper
【解决】
经过无数次的尝试,最后我竟然发现,不断的对比关于pom.xml的配置,我竟然发现,我少了一个依赖没有添加 SpringCloud Loadbalancer,真是见了鬼了,因为我在另外的一个工程中,并没有引入这个依赖啊。
1 | <!-- SpringCloud Loadbalancer --> |
但是很多的地方都没有提到过也加入这个依赖,只是说要添加 spring-boot-starter-web 这个依赖,这我就比较多难过了,难道是因为我引入的方式不对吗?
1.cannot find DiscoveryClient bean error in spring boot
2.SpringCloud学习笔记———-LoadBalancedClient无法注入的问题 这里说的是检查有没有 eureka注入spring-cloud-starter-netflix-eureka-client
3.spring cloud默认的LoadBalancerClient是RibbonLoadBalancerClient
4. 微服务Nacos\LoadBalancerClient\R-爱代码爱编程 这个没看,感觉写的有点乱,这里还讲了 基于Feign的远程服务调用。
5.di注入LoadBalancerClient类实现负载均衡,借助@LoadBalanced注解实现RestTemplate的负载均衡 这里也没有提到过要添加Spring-cloud-loadbalancer依赖啊,这是怎么回事?