4.SpringCloud

news2024/10/6 12:23:37

1.SpringCloud概述

        Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,集群状态。(用来管理项目)

2.注册中心Eureka

        Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装,它实现了服务治理的功能,Spring Cloud Eureka提供服务端与客户端,服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。服务端和客户端均采用Java语言编写。

        服务器将自己的信息(IP、端口号、服务类) 提供给注册中心,然后每个服务器将所有存在注册中心的注册信息保存一份在自己服务器中,从而实现服务器之间的交流

3. 分布式项目搭建

        在一个分布式项目中,通常会采用父项目和子项目的方式来进行模块化开发和管理。父项目用于管理整个项目的共享依赖和配置,而子项目则代表着项目的不同模块或子系统。

3.1 创建父项目

         可以删除父项目中的src,父项目不需要写代码

        在父项目pom.xml中指定打包方式为pom

<packaging>pom</packaging>

3.2 创建子项目

        子项目pom.xml中指定父项目

 <parent>
           <artifactId>springcloud-teach</artifactId>
           <groupId>com.luobei</groupId>
           <version>1.0</version>
</parent>

        父项目pom.xml中指定子项目 

<modules>
            <module>eureka-server</module>
</modules>

        配置yml配置文件

server:
  port: 8081
spring:
  application:
    name: goods   #微服务可以根据微服务的名字自动形成集群,微服务的名字中不要出现下划线
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/    #向这个接口注册
  instance:
    instance-id: goods-8081     #指定当前微服务在注册中心中的id

        主启动类上开启 @EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

3.2.1 创建注册中心

        注册中心其实就是一个特殊的子项目,除yml配置不同,其他与别的子项目一致

server:
  port: 8761
spring:
  application:
    name: eureka-server   #微服务可以根据微服务的名字自动形成集群,微服务的名字中不要出现下划线
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false   #是否将当前服务器注册到注册中心
    fetch-registry: false    #是否将注册列表的信息拉取到本地
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}    
        #注册中心的接口,其他微服务器通过该接口进行注册

        主启动类上开启@EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

4.微服务调接口

        在微服务架构中,服务之间的通信是通过调用接口来实现的。这些接口可以是 RESTful API、gRPC、消息队列等方式实现的。

4.1 RestTemplate(仅了解)

        属于SpringBoot

        缺点:put、delete请求得不到返回的结果,使用、维护不方便

4.2 openfeign

        OpenFeign 是一个基于 Java 的声明式 HTTP 客户端,通常用于微服务架构中不同服务之间的接口调用。它允许开发者通过注解的方式定义接口,然后由 OpenFeign 自动生成具体的实现。这样可以简化服务之间的通信,让接口调用看起来更像是本地方法调用。

4.2.1 导入依赖

        父项目:

  <dependencyManagement>
    <dependencies>
      <!--openfeign-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-openfeign-core</artifactId>
        <version>2.2.6.RELEASE</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

        公共模块:

<!--openfeign-->
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
      <version>2.2.6.RELEASE</version>
</dependency>

        子项目:

<!--openfeign-->
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>

4.2.2 编写接口

        若接口将会被多个微服务调用则写在commons中

@FeignClient(name="GOODS",path="/goods")
public interface FeignGoodsService {
    @PutMapping("/updateStock")
    ResponseResult<List<Goods>> del(@RequestBody List<OrderGoodsVo> orderGoodsVoList);
}

        @FeignClient(name = "GOODS",path = "/goods") 中name为被调用微服务的名字,path为路径前缀,将要调用的接口方法的声明、请求方式全部拷贝过来

4.2.3 使用接口

        在需要使用接口的微服务的主启动类上扫描feign接口

@EnableFeignClients(basePackages = "com.luobei.commons.service")

        然后在需要使用的地方注入就行了

@Resource
private FeignGoodsService feignGoodsService;
@Override
public OrderVo add(Integer uid, AddOrderVo orderVo) throws OutOffStockException {
    ResponseResult<List<Goods>> del = feignGoodsService.del(Arrays.asList(orderGoodsVo));
    return del;
}

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

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

相关文章

【游戏评测】河洛群侠传一周目玩后感

总游戏时长接近100小时&#xff0c;刚好一个月。 这两天费了点劲做了些成就&#xff0c;刷了等级&#xff0c;把最终决战做了。 总体感觉还是不错的。游戏是开放世界3D游戏&#xff0c;Unity引擎&#xff0c;瑕疵很多&#xff0c;但胜在剧情扎实&#xff0c;天赋系统、秘籍功法…

读书笔记 |【项目思维与管理】➾ 成功的项目需要有效的管理

读书笔记 |【项目思维与管理】➾ 成功的项目需要有效的管理 一、项目:一项难以完成的使命二、要管理项目先要理解"管理"三、项目管理成功的标准四、使项目利益相关者满意 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 如果你没有…

Activity启动模式中的生命周期

彻底明白Activity启动模式中的生命周期&#xff0c;从此不再成为面试难点。 参考&#xff1a; https://www.zhihu.com/tardis/zm/art/429845377?source_id1003 https://developer.aliyun.com/article/951609 https://cloud.tencent.com/developer/article/1763205 Activity…

2020年9月全国计算机等级考试真题(C语言二级)

2020年9月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 有下列程序&#xff1a; #include<stdio.h> main() { FILE*fp;int k,n,a[6]{1,2,3,4,5,6}; fpfopen("d2.dat","w"); fprintf(fp,"%d%d%d\n",a[0],…

代码随想录章节目录—力扣算法题系列:数组.Java版(可点击文中超链接跳转到想看的题目)

版本说明 当前版本号[20230816]。 版本修改说明20230816初版 目录 文章目录 版本说明目录数组总结篇数组理论基础数组的经典题目二分法双指针法滑动窗口模拟行为 总结 数组总结篇 数组理论基础 数组是非常基础的数据结构&#xff0c;在面试中&#xff0c;考察数组的题目一…

B-树和B+树的区别

B-树和B树的区别 一、B-tree数据存储 在下图中 P 代表的是指针&#xff0c;指向的是下一个磁盘块。在第一个节点中的 16、24 就是代表我们的 key 值是什么。date 就是这个 key 值对应的这一行记录是什么。 假设寻找 key 为 33 的这条记录&#xff0c;33 在 16 和 34 中间&am…

Kubernetes入门 五、深入Pod:探针和生命周期

目录 探针探针类型LivenessProbeReadinessProbeStartupProbe&#xff1a; 探测方式ExecActionTCPSocketActionHTTPGetAction 参数配置操作示例 生命周期钩子函数生命周期 探针 所谓的探针就是容器内应用的监测机制&#xff0c;为了确保容器在部署后确实处在正常运行状态。 比…

系统驱动-点亮LED灯

实现LED点亮 demo.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/device.h> #include "head.h" int major; char kbuf[12…

GitHub星标11.9k的机器学习开源项目分享,3 万行代码,30多个主流模型

今天给大家分享一个超剽悍的开源项目&#xff0c;目前在github上已获11.9k星标。 项目作者是普林斯顿博士后David Bourgin&#xff0c;他用 NumPy 手推了一大波 ML 模型&#xff0c;基本上把主流模型都实现了一遍&#xff0c;这个工作量我直呼牛X。 虽然现在手写模型已经不是…

星星之火:国产讯飞星火大模型的实际使用体验(与GPT对比)

#AIGC技术内容创作征文&#xff5c;全网寻找AI创作者&#xff0c;快来释放你的创作潜能吧&#xff01;# 文章目录 1 前言2 测试详情2.1 文案写作2.2 知识写作2.3 阅读理解2.4 语意测试&#xff08;重点关注&#xff09;2.5 常识性测试&#xff08;重点关注&#xff09;2.6 代码…

摄影馆预约小程序开发指南:打造高效预约管理系统

随着数字化时代的到来&#xff0c;越来越多的行业开始借助互联网工具提升服务质量和效率。摄影行业也不例外&#xff0c;为了更好地满足用户的需求&#xff0c;许多摄影店开始搭建预约小程序&#xff0c;方便用户在线预约和管理。 首先&#xff0c;进入乔拓云网后台&#xff0c…

回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测

回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测 目录 回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测&#x…

深入剖析低代码平台的优势与挑战

近年来&#xff0c;我国高度重视数字经济的发展&#xff0c;强化数字技术创新应用&#xff0c;全面推进企业数字化转型工作。在全国各行业数字化转型的浪潮中&#xff0c;低代码通过可视化、模块化开发操作&#xff0c;降低软件开发门槛&#xff0c;强化资源扩展和信息集成&…

分布式学习:从分布式系统的特征开始

正文   在延伸feature&#xff08;分布式系统需要考虑的特性&#xff09;的时候&#xff0c;我逐渐明白&#xff0c;这是因为要满足这些feature&#xff0c;才设计了很多协议与算法&#xff0c;也提出了一些理论。比如说&#xff0c;这是因为要解决去中心化副本的一致性问题&…

司徒理财:8.16黄金行情走势分析及策略美盘看涨

黄金早盘已经给了1902的现价多单&#xff0c;日内最高触及1907&#xff01;如期拉升&#xff01;黄金现在筑底阶段&#xff0c;维持低多看涨思路&#xff0c;美盘1900附近继续做多看涨&#xff0c;等待反弹&#xff01;黄金现在的下跌已经到达日线前低位置&#xff0c;继续破位…

程序员的新型生产力工具,效率起飞了~

文章目录 一、低代码平台存在的意义 二、国内外低代码开发研究现状 三、低代码开发平台设计与实现 系统架构总体设计 01.表单引擎设计 02.流程引擎设计 03.数据库设计 四、总结 一、低代码平台存在的意义 传统软件开发交付链中&#xff0c;需求经过3次传递&#xff0c;用户→业…

录取查询页面怎么做?

招生录取工作开始后&#xff0c;负责招生的老师需要完成一系列任务&#xff0c;其中包括确定招生录取名单和及时向考生公布录取情况。为了快速完成录取查询工作的发布&#xff0c;招生老师们可以采取以下步骤&#xff1a; 1. 整理录取名单&#xff1a;招生老师们首先需要整理好…

使用爱校对软件保证公文材料质量的关键步骤

在日常的公文处理中&#xff0c;保证材料质量是每个企业和机构都追求的目标。而要实现这个目标&#xff0c;使用正确的工具是关键。爱校对软件正是这样一款专业的校对工具&#xff0c;它可以帮助我们保证公文材料的质量。接下来&#xff0c;让我们一起来看看使用爱校对软件保证…

【网络编程系列】网络编程实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

JavaScript【节流(throttle)、Navigator 对象、Screen 对象】(十七)

目录 节流(throttle) 实现 window 对象_属性 window 对象_方法