spring cloud

news2024/9/22 17:28:26

文章目录

目录

文章目录

前言

一、spring cloud

二、ribbon负载均衡

三、openfeign

总结



前言

微服务就是一种将一个单一应用程序拆分为一组小型服务的方法,拆分完成后,每一个服务都运行在独立的进程中,服务于服务之间采用轻量级的通信机制来进行沟通(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;
    }

 

 

 

 

 


总结

微服务架构灵活布置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我不允许你还不知道CSS的filter的drop-shadow阴影用法以及与box-shadow的区别详解

这里有两个图片的阴影&#xff0c;你觉得哪个好看&#xff1f; 一个是使用box-shadow另一个是使用filter: drop-shadow 一、我们来了解一下CSS的filter&#xff08;过滤器&#xff09; 该CSS的filter属性可以实现很多效果 &#xff08;一&#xff09;filter: blur(5px) // 高…

Elasticsearch索引库和文档的相关操作

前言&#xff1a;最近一直在复习Elasticsearch相关的知识&#xff0c;公司搜索相关的技术用到了这个&#xff0c;用公司电脑配了环境&#xff0c;借鉴网上的课程进行了总结。希望能够加深自己的印象以及帮助到其他的小伙伴儿们&#x1f609;&#x1f609;。 如果文章有什么需要…

if从入门到出轨

if从入门到出轨(java版本) 为什么会产生很多if分支 在我们的日常生活中,会遇到很多判断逻辑,屁如,如果你在2月14号,心情很好,那么就给女朋友买了个iPhone 14 Pro Max 1TB 银白色,如果你女朋友在2月14号没有收到您老人家的礼物,那么你可能睡沙发或者轨搓衣板,或者直接和其他帅…

【Kafka】【十九】新消费组的消费offset规则

新消费组的消费offset规则 新消费组中的消费者在启动以后&#xff0c;默认会从当前分区的最后⼀条消息的offset1开始消费&#xff08;消费新消息&#xff09;。可以通过以下的设置&#xff0c;让新的消费者第⼀次从头开始消费。之后开始消费新消息&#xff08;最后消费的位置的…

电脑分盘怎么合并?只需1分钟,轻松学会

有些小伙伴喜欢将电脑进行分盘&#xff0c;以此将文件放进不同的分盘进行管理。但有时候&#xff0c;电脑磁盘分盘过多&#xff0c;管理起来又会有些麻烦。将一些闲置的磁盘进行合并很有必要。电脑分盘怎么合并&#xff1f;下面就跟着小编一起来看看吧。 电脑分盘怎么合并&…

Java 变量和数据类型,超详细整理,适合新手入门

目录 一、什么是变量&#xff1f; 二、变量 变量值互换 三、基本数据类型 1、八种基本数据类型 2、布尔值 3、字符串 四、从控制台输入 一、什么是变量&#xff1f; 变量是一种存储值的容器&#xff0c;它可以在程序的不同部分之间共享&#xff1b;变量可以存储数字、字…

二维数组的定义

1. 概念二维数组就是一种数组的数组&#xff0c;其本质上还是一个一维数组&#xff0c;只是它的数据元素又是一个一维数组。如果你对这个概念想象不出来&#xff0c;给大家举个栗子&#xff0c;相信吸烟的同学一下子就会明白。一根烟 一个变量一包烟 20根烟 一维数组一条烟 …

TIA博途中DB数据块清零的具体方法示例

TIA博途中DB数据块清零的具体方法示例 TIA中数据块如何实现清零? 在TIA指令集内有多个移动指令可对DB块内数据进行清零处理。对于S7-1500 CPU或ET200SP CPU来说,可使用BLKMOV、FILL以及SCL的POKE_BLK指令。但是这些指令对DB块清零时,要求DB块必需为非优化DB。 对于优化的DB…

国内ChatGPT日趋成熟后,可以优先解决的几个日常小问题

现在ChatGPT的发展可谓如日中天&#xff0c;国内很多大的公司例如百度、京东等也开始拥抱新技术&#xff0c;推出自己的应用场景&#xff0c;但可以想象到的是&#xff0c;他们必定利用这个新技术在巩固自己的现有应用场景&#xff0c;比如某些客服&#xff0c;你都不用想&…

Android 进阶——Framework 核心之Binder 对象及其生命周期小结(四)

文章大纲引言一、Binder概述二、Binder 对象三、Binder 对象生命周期的管理1、Binder本地对象&#xff08;BBinder&#xff09;的生命周期管理2、Binder 实体对象&#xff08;binder_node&#xff09;生命周期的管理3、Binder 引用对象&#xff08;binder_ref&#xff09;生命周…

ChatGPT入门案例|商务智能对话客服(一)

ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具&#xff0c;使用了Transformer神经网络架构&#xff0c;也是GPT-3.5架构&#xff0c;这是一种用于处理序列数据的模型&#xff0c;拥有语言理解和文本生成能力&#xff0c;尤其是它会通过连接…

32个关于FPGA的学习网站

语言类学习网站 1、HDLbits 网站地址&#xff1a;https://hdlbits.01xz.net/wiki/Main_Page 在线作答、编译的学习Verilog的网站&#xff0c;题目很多&#xff0c;内容丰富。非常适合初学Verilog的人&#xff01;&#xff01;&#xff01; 2、牛客网 网站地址&#xff1a;http…

2.12、进程互斥的软件实现方法

学习提示: 理解各个算法的思想、原理结合上小节学习的 “实现互斥的四个逻辑部分”&#xff0c;重点理解各算法在进入区、退出区都做了什么分析各算法存在的缺陷&#xff08;结合 “实现互斥要遵循的四个原则” 进行分析&#xff09; 1、单标志法 算法思想&#xff1a;两个进…

SonicWall:请立即修复SMA 1000 漏洞

近日&#xff0c;网络安全供应商SonicWall发布了关于安全移动访问 (SMA) 1000设备的三个安全漏洞的紧急报告&#xff0c;其中包括一个高威胁性的身份验证绕过漏洞。SonicWall指出&#xff0c;攻击者可以利用这些漏洞绕过授权&#xff0c;并可能破坏易受攻击的设备。 从报告中可…

Cow Acrobats ( 临项交换贪心 )

题目大意&#xff1a; N 头牛 &#xff0c; 每头牛有一个重量(Weight)和一个力量(Strenth) &#xff0c; N头牛进行排列 &#xff0c; 第 i 头牛的风险值为其上所有牛总重减去自身力量 &#xff0c; 问如何排列可以使最大风险值最小 &#xff0c; 求出这个最小的最大风险值&am…

Java JCP

Java JCP目录概述需求&#xff1a;设计思路参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solv…

GIS在地质灾害危险性评估与灾后重建中的实践技术应用及python机器学习灾害易发性评价模型建立与优化

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

手动部署ECS线上数据库及使用

文章参考自手动部署MySQL数据库&#xff08;CentOS 7&#xff09; (aliyun.com)MySQL是一个关系型数据库管理系统&#xff0c;常用于LAMP和LNMP等网站场景中。本教程介绍如何在Linux系统ECS实例上安装、配置以及远程访问MySQL数据库。前提条件已创建一台ECS实例。具体操作&…

[ 常用工具篇 ] CobaltStrike(CS神器)基础(一) -- 安装及设置监听器详解

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

YOLO-V5轻松上手

之前介绍了YOLO-V1~V4版本各做了哪些事以及相较于之前版本的改进。有的人或许会想“直接学习最近版本的算法不好吗”&#xff0c;在我看来&#xff0c;每一个年代的版本/算法都凝聚着当年学术界的智慧&#xff0c;即便是它被淘汰了也依旧有值得思考的地方&#xff0c;或是可以使…