一、创建微服务
将RestTemplate交给Spring管理
@Configuration
public class ConfigBean(){
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
通过restTemplate调用其他微服务。
二、Nacos
Nacos的作用就是一个注册中心,用来管理注册上来的各个微服务。
如何将微服务注册到Nacos中
- 在pom.xml中添加nacos的依赖
- 在主类上添加@EnableDiscoveryClient注解
@SpringBootApplication
@EnableDiscoveryClient
public class XXXApplication {}
- 在application.yml中添加nacos服务的地址
如何实现微服务调用
ServiceInstance serviceInstance = discoveryClient.getInstances("微服务名").get(0);
//获取微服务地址及端口
String url = serviceInstance.getHost() + ":" + serviceInstance.getPort();
//使用restTemplate调用微服务(此处以Product为例)
Product product = restTemplate.getForObject(
"http://" + url + "/product/" + pid, Product.class);
三、实现服务调用的负载均衡
自定义规则的负载均衡
当启动了两个相同的微服务(端口不同)时
List<ServiceInstance> instances = discoveryClient.getInstances("微服务名");
int index = new Random().nextInt(instances.size());
//实现随机去请求一个微服务
ServiceInstance serviceInstance = instances.get(index);
基于Ribbon实现负载均衡
第1步:在RestTemplate 的生成方法上添加@LoadBalanced注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
第2步:直接使用微服务名字, 从nacos中获取服务地址
//直接使用微服务名字, 从nacos中获取服务地址
String url = "service-product";
//使用restTemplate调用微服务(此处以Product为例)
Product product = restTemplate.getForObject(
"http://" + url + "/product/" + pid, Product.class);
第三步:可以通过修改配置来调整Ribbon的负载均衡策略(不太懂,放着再说)
service-product: # 调用的提供者的名称
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
基于Feign实现服务调用
Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。
Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。
1. 加入Fegin的依赖
2. 在主类上添加Fegin的注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients//开启Fegin
public class XXXApplication {}
3. 创建一个service, 并使用Fegin实现微服务调用
四、Sentinel实现服务容错(先跳过)
五、Gateway
路由(Route) 是 gateway 中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面的几个信息:
id:路由标识符,区别于其他 Route。
uri:路由指向的目的地 uri,即客户端请求最终被转发到的微服务。
order:用于多个 Route 之间的排序,数值越小排序越靠前,匹配优先级越高。
predicate:断言的作用是进行条件判断,只有断言都返回真,才会真正的执行路由。
fifilter:过滤器用于修改请求和响应信息。
配置文件写法(结合nacos):
server:
port: 8000
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
discovery:
locator:
enabled: true # 让gateway可以发现nacos中的微服务
lower-case-service-id: true # 表示将请求路径的服务名配置改成小写 因为服务注册的时候,向注册中心注册时将服务名转成大写的了
routes:
- id: route1
uri: lb://admin # lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略
predicates:
- Path=/admin/**
六、Sluth链路追踪(跳过)
七、MQ消息队列
应用场景:异步解耦、流量削峰
流量削峰是消息队列 MQ 的常用场景,一般在秒杀或团队抢购(高并发)活动中使用广泛。在秒杀或团队抢购活动中,由于用户请求量较大,导致流量暴增,秒杀的应用在处理如此大量的访问流量后,下游的通知系统无法承载海量的调用量,甚至会导致系统崩溃等问题而发生漏通知的情况。为解决这些问题,可在应用和下游通知系统之间加入消息队列 MQ。
学习Rabbit MQ