SpringCloudAlibaba基础分享(二)

122 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

image.png

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治理技术,实现对动态服务的注册与发现、本地负载均衡、容错等。

Image.png

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