Spring Cloud总结
阅读原文时间:2023年07月11日阅读:1

restTemplate

  • 消费者模块编写restTemplate配置类,即可在控制层调用提供者模块

    // 配置类
    @Configuration
    public class ApplicationContextConfig {
    @Bean
    public RestTemplate getRestTemplate() {
    return new RestTemplate();
    }
    }

    // 控制层通过restTemplate
    @RestController
    public class OrderController {
    // 被调用者的ip+端口
    public static final String PAYMENT_URL = "http://localhost:8001";
    // 注入
    @Resource
    private RestTemplate restTemplate;
    // 访问http://localhost:80/consumer/payment/create,即可访问到被调用者的接口
    @GetMapping("/consumer/payment/create")
    public CommonResult create(Payment payment){
    // 参数为:被调用者的ip+端口+接口名,参数,返回值
    return restTemplate.postForObject(PAYMENT_URL+"/payment/create", payment, CommonResult.class);
    }
    }

ribbon

  • 用于服务调用和服务调用时的负载

    // nginx实现负载均衡属于集中式LB,即在服务的消费方和提供方提供LB设施,当消费方发请求调提供方时,消费方的请求会先进入nginx,通过nginx转发分配到提供方集群
    // Ribbon属于进程内LB,消费方自己选择调用哪个提供方
    // 当消费者模块调用提供者模块集群时,在消费者模块自定义规则类;自定义的规则类不能放在@ComponentScan所扫描的当前包及其子包下
    @Configuration
    public class MySelfRule {
    @Bean
    public IRule myRule(){
    return new RandomRule();
    }
    }

    // 在消费者模块的启动类添加注解,指定要负载的集群和自定义的负载规则;前提是这个集群和当前消费者模块已经注册到服务注册中心
    @RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)

openFeign

  • 用于服务调用,在消费者模块的业务层编写接口,接口中是提供者模块的控制层方法,消费者模块的控制层调用该接口

    // 消费者模块通过openFeign调用提供者模块中的接口方法
    // 在消费者模块引入openFeign依赖
    org.springframework.cloud spring-cloud-starter-openfeign

    // 启动类添加注解
    @EnableFeignClients

    // 新建feign接口
    @Component
    @FeignClient(value = "CLOUD-PAYMENT-SERVICE") // 指向服务提供者的服务名
    public interface PaymentFeignService {
    // 直接将提供者要调用的方法复制到该接口即可
    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id);
    }

    // 控制层
    @RestController
    public class OrderFeignController {
    // 注入接口
    @Resource
    private PaymentFeignService paymentFeignService;
    // 通过访问当前模块:http://localhost:80/consumer/payment/get/{id}
    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id) {
    return paymentFeignService.getPaymentById(id);
    }
    }

gateWay

  • 需新建一个module作为网关:用于反向代理,隐藏微服务的IP;用于负载均衡,访问网关,由网关进行请求转发;用于过滤,只有指定规则的请求才能进来

    org.springframework.cloud spring-cloud-starter-gateway

    yml中配置服务注册中心,将该网关模块注册进服务注册中心

    yml中配置网关转发的地址

    spring:
    application:
    name: cloud-gateway
    cloud:
    gateway:
    routes:
    - id: payment_routh # 路由的ID
    uri: http://localhost:8001 # 匹配后提供服务的路由地址
    predicates:
    - Path=/payment/get/** # 断言,路径相匹配的进行路由

    访问:http://localhost:9527/payment/get/3 即可访问:http://localhost:8001/payment/get/3

  • gateWay网关实现负载均衡

    #
    spring:
    cloud:
    gateway:
    discovery:
    locator:
    enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
    routes:
    - id: payment_routh # 路由的ID
    uri: lb://cloud-payment-service # 匹配后提供服务的路由地址
    predicates:
    - Path=/payment/get/** # 断言,路径相匹配的进行路由

stream

  • 用于消息中间件切换

sleuth

  • 集成了zipkin:启动jar,在微服务中配置zipkin,访问后即可在zipkin中查看请求链路

nacos

  • 用于服务注册、配置中心,安装应用即可

sentinel

  • 用于限流、降级:只需启动jar包即可,配置限流规则和降级规则会设置熔断时间

seata

  • 用于解决分布式事务问题,需安装应用

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器