spring cloud


前言

微服务就是一种将一个单一应用程序拆分为一组小型服务的方法,拆分完成后,每一个服务都运行在独立的进程中,服务于服务之间采用轻量级的通信机制来进行沟通(Spring Cloud 中采用基于HTTP 的 RESTful API)。

每一个服务,都是围绕具体的业务进行构建,例如一个电商系统,订单服务、支付服务、物流服务、会员服务等等,这些拆分后的应用都是独立的应用,都可以独立的部署到生产环境中。就是在采用微服务之后,我们的项目不再拘泥于一种语言,可以 Java、Go、Python、PHP 等等,混合使用,这在传统的应用开发中,是无法想象的。而使用了微服务之后,我们可以根据业务上下文来选择合适的语言和构建工具进行构建。

微服务可以理解为是 SOA 的一个传承,一个本质的区别是微服务是一个真正分布式、去中心化的,微服务的拆分比 SOA 更加彻底。

优点:复杂度可控、独立部署、技术选型灵活、较好的容错性、较强的可扩展性


一、spring cloud

  • Springcloud为微服务思想提供了完美的解决方案

  • Springcloud是一些列框架的集合体(服务的注册与发现【注册中心】、服务间远程调用、服务降级、服务熔断、服务限流、分布式事务等)

  • 包括:服务注册与发现、负载均衡、服务之间调用、容错、服务降级、断路器、消息总线、分布式配置中心、链路器

  • SpringBoot专注于快速方便的开发单个个体微服务。

  • SpringCloud是关注全局的微服务协调、整理、治理的框架,它将SpringBoot开发的单体整合并管理起来。

  • SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系

二、ribbon负载均衡

Ribbon是Netflix发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中,nacos一般配合Ribbon*客户端负载均衡****的功能,Ribbon利用从nacos中读 取到的服务信息,在调用服务节点提供的服务时,会合理(策略的进行负载。 在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的 列表信息,并基于内置的负载均衡算法,请求服务

<!--nacos客户端-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

实现导入在消费者的全局配置类中加上启用该组件的注解

    @Bean
    @LoadBalanced //开启ribbon
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

 //在springcloud中提供了一个类DiscoveryClient,该类可以获取注册中心的清单列表
    @GetMapping("save/{pid}/{num}")
    public String save(@PathVariable Integer pid,@PathVariable Integer num){
         //封装一个订单类对象
        Order order=new Order();
        order.setNumber(num);
        //用户的信息--token session中获取
        order.setUid(1);
        order.setUsername("454");
        //商品信息---调用商品微服务提高的接口。微服务之间调用:基于http协议调用。
        // 原始的方式: 引用httpclient依赖。完成服务之间的调用.
        // spring框架基于http协议封装了一个工具类RestTemplate。
        Product product = restTemplate.getForObject("http://my-product/product/getById/" + pid, Product.class);
        order.setPid(pid);
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        String save = orderService.save(order);

        return save;
    }

 所有策略

自定义服务的策略

 shop-product:  # 这里使用服务的名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #使用的的负载均衡策略

三、openfeign

原来使用restTemplate完成服务之间的调用: 它不符合我们的编程习惯。---在某层需要另一层的对象时,直接通过@Autowire注入,并通过对象调用其他的方法,传入相关的参数。

Feign是Spring Cloud提供的声明式、模板化的HTTP客户端, 它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。

Spring Cloud集成Feign并对其进行了增强,使Feign支持了Spring MVC注解;Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。

实现第一步 

 <!--openfeign的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency> 

第二步创建feign的接口

@FeignClient(value = "my-product")
public interface ProductFeign {

    @GetMapping("/product/getById/{pid}") //必须和提供者的路径保持一致
    public Product findById(@PathVariable Integer pid);
}

最后在消费者端的启动类下开启该组件

@EnableFeignClients //开启openfeign注解驱动

然后就能在控制层 注入该接口 像调用本地方法一样,调用服务的接口

 @Autowired
    private ProductFeign productFeign;


    //在springcloud中提供了一个类DiscoveryClient,该类可以获取注册中心的清单列表
    @GetMapping("save/{pid}/{num}")
    public String save(@PathVariable Integer pid,@PathVariable Integer num){
         //封装一个订单类对象
        Order order=new Order();
        order.setNumber(num);
        //用户的信息--token session中获取
        order.setUid(1);
        order.setUsername("老六");
        //调用远程接口,就像调用本地方法一样
        Product product = productFeign.findById(pid);
        order.setPid(pid);
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        String save = orderService.save(order);

        return save;
    }


总结

微服务架构灵活布置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值