学习笔记——江南一点雨微服务视频2、3章学习心得

一、简单理解

其实微服务本身并不复杂,就我学习几天的理解,微服务最大的作用还是解耦。将大的应用分解为若干个互不干扰的模块。每个模块都可以独立运行和部署。既然模块都可以独立部署,那么每一个模块就都可以看作一个单体应用,也称为一个服务。那么传统的单体应用后台能做什么,那一个微服务同样也可以,比如分布式部署。
刚刚说微服务本身不复杂,其中肯定有复杂的部分。比如数据同步之类的。。(我还没学到,之后再补充)

二、注册中心与服务注册

  • 注册中心本身也是一个服务,只不过它的职责相对特殊。
  • 在微服务的应用中,所有的服务都会注册到注册中心。

那么为什么需要注册中心这个东西呢?
其实还是为了解耦,上面说了,每一个服务都是一个独立的应用。如果应用A要调用应用B的接口,那么必然需要知道B接口的调用地址。但是如果这时候应用B的负载变大,需要分布式部署或者B需要改变部署位置。那么所有调用B应用接口的地址都需要改变。这显然是强耦合的。
而注册中心就解决了这个问题。当B服务注册到注册中心后,注册中心会保存此次注册的服务地址,当其他服务需要调用B服务的接口,只需要从服务中心获取就行了。而且已经注册的服务会每30秒向注册中心发送一次心跳信息,以及一些其他的操作,这里就不详细展开了。到这里就显而易见了,服务中心的主要功能就是为已注册的服务提供其他服务的最新地址。

服务注册
在视频里,举了生产者与消费者的例子,相对比较简单。在现实中,在作为生产者的同时可能也是消费者,反之亦然。
在微服务架构中想要做到某服务的负载均衡也十分方便,只需要将同一个服务部署到不同的环境,并将它们在注册中心注册,在调用服务时均衡调用也就做到了负载均衡。

RestTeamplate
一个方便发送http请求的实现类。
这个类并非spring cloud中提供,而是spring提供的。只是在单体应用中很少有后端发送http请求的需求。
其中有一些点需要注意,
在使用restTemplate.postForObject方法发送请求时。
可以使用key/value的形式传递,但是必须使用MultiValueMap类型的map,否则会接收不到数据。(稍微看了下源码,还没定位到原因)
还可以使用json的形式传递,spring boot会将对象序列化为json。

restTemplate.postForObject
			("http://provider/helloPostJson", user, User.class);

需要注意的是,如果使用这种方式发送请求,接口参数需要加上@RequestBody注解。

三、负载均衡

在spring cloud中实现负载均衡十分容易,只需要在RestTemplate方法上添加@LoadBalanced注解即可。在添加注解之后,普通的请求工具就自动具备了负载均衡的功能。
总体来说,过程是这样的:

  1. 从Eureka Client本地缓存的服务注册信息列表中,选择一个可以调用的服务。挑选的方式,取决于负载均衡策略的配置。默认是线性负载均衡。
  2. 根据步骤一中挑选的服务,重构URL地址
  3. 将步骤一、二嵌入到RestTemplate中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值