持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
SpringCloud第一代:
- SpringCloud Config 分布式配置中心
- SpringCloud Netflix 核心组件
- Eureka:服务治理
- Hystrix:服务保护框架
- Ribbon:客户端负载均衡器
- Feign:基于ribbon和hystrix的声明式服务调用组件
- Zuul: 网关组件,提供智能路由、访问过滤等功能。
SpringCloud第二代(自己研发)和优秀的组件组合:
- Spring Cloud Gateway 网关
- Spring Cloud Loadbalancer 客户端负载均衡器
- Spring Cloud r4j(Resilience4J) 服务保护
- Spring Cloud Alibaba Nacos 服务注册
- Spring Cloud Alibaba Nacos 分布式配置中心
- Spring Cloud Alibaba Sentinel服务保护
- SpringCloud Alibaba Seata分布式事务解决框架
- Alibaba Cloud OSS 阿里云存储
- Alibaba Cloud SchedulerX 分布式任务调度平台
- Alibaba Cloud SMS 分布式短信系统
nacos产生背景,rpc远程调用,服务的url的治理
Rpc的远程调用框架 httpClient、gprc、dubbo、rest、openfegin等
传统rpc远程调用有哪些缺点?
1、超时问题
2、安全问题
3、服务与服务之间的url地址管理
每个服务的url管理地址非常复杂,所以采用服务url治理技术,实现对动态服务的注册与发现、本地负载均衡、容错等。
rpc远程调用中,地址:域名+端口号+调用方法
会改变的是:域名+端口号
把每个服务器地址信息和端口人工存放到数据库
id serviced ip 端口号
1 member 192.*** 8080
2 member 192.*** 8081
基于数据库形式实现管理,维护成本十分高、没有实现动态智能化
nacos实现注册中心和分布式配置中心,默认端口号8848
package com.lijianb.service;
import com.lijianb.loadBalance.LoadBanlancer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* @program: demo_nacos
* @description:
* @author: lijianb
* @create: 2022-02-17 20:56
*/
@RestController
public class OrderService {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBanlancer loadBanlancer;
@Autowired
private LoadBalancerClient loadBalancerClient;
@RequestMapping("/orderToMember")
public String orderToMember(){
//获取列表地址
List<ServiceInstance> instances = discoveryClient.getInstances("nacos-member");
//列表中任意选择一个,实现本地rpc调用,采用负载均衡
ServiceInstance singleAddres = loadBanlancer.getSingleAddres(instances);
String result = restTemplate.getForObject(singleAddres.getUri()+"/getUser",String.class);
return "订单调会员返回结果:"+result;
}
@RequestMapping("/orderToRibbonMember")
public String orderToRibbonMember(){
String result = restTemplate.getForObject("http://nacos-member/getUser",String.class);
return "订单调会员返回结果:"+result;
}
}
spring:
application:
name: nacos-order
cloud:
nacos:
discovery:
server-addr: 192.168.31.**:8848
server:
port: 8090
spring:
application:
name: nacos-member
cloud:
nacos:
discovery:
server-addr: 192.168.31.**:8848
server:
port: 8080