前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java学习笔记-微服务(1)-项目创建及相互通信

Java学习笔记-微服务(1)-项目创建及相互通信

原创
作者头像
咸鱼程序员
发布2025-03-03 00:19:00
发布2025-03-03 00:19:00
1150
举报

SpringCloud简介

Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。Spring Cloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说:Spring Cloud 提供了构建分布式系统所需的"全家桶"。

优点:

  • 集大成者,Spring Cloud 包含了微服务架构的方方面面。
  • 约定优于配置,基于注解,没有配置文件。
  • 轻量级组件,Spring Cloud 整合的组件大多比较轻量级,且都是各自领域的佼佼者。
  • 开发简便,Spring Cloud 对各个组件进行了大量的封装,从而简化了开发。
  • 开发灵活,Spring Cloud 的组件都是解耦的,开发人员可以灵活按需选择组件。

缺点:

  • 项目结构复杂,每一个组件或者每一个服务都需要创建一个项目。
  • 部署门槛高,项目部署需要配合 Docker 等容器技术进行集群部署,而要想深入了解 Docker,学习成本高。

常见的与 Spring Cloud 配合的组件

服务注册与发现:Eureka、Consul、Etcd、Nacos

服务调用和负载均衡:OpenFeign、LoadBalancer

分布式事务:Seata、LCN、Hmily

服务熔断和服务降级:Circuit Breaker、Sentinel

服务链路追踪:Micrometer Tracting

服务网关:Gateway

分布式配置管理:Consul、Nacos

创建项目及依赖相关

项目创建步骤

  • 在父工程下创建子工程 module
  • 修改子工程 pom 文件
  • 新增子工程的 yml 文件
  • 修改主启动类
  • 按照模块需要完成业务流程

spring cloud 父工程中,若指定了版本号,则子工程添加对应依赖时不需要指定版本号,保证了多个子项目使用同样的依赖。当想升级或切换版本时,只需要更新父工程。若某个子项目需要另外的版本,则在子类的 version 标签中指定即可。

dependencyManagement 标签只做声明依赖,并不引入,因此子项目使用时需要显示声明需要使用的依赖。如果不在子项目中显示声明,只有在子项目中写了依赖项且不指定版本时,才会从父项目中继承该项。

若依赖粘贴后,dependencyManagement 标签内爆红,无需处理。原因是此处仅仅是声明,内部 jar 包并未下载。当子工程使用该依赖时,Maven 进行对应依赖下载后即可变为正常颜色。如果有强烈的需求要消除爆红,则需要将 dependencyManagement 标签整体注释,先使用子项目导入依赖进行下载,然后放开注释让父项目加载。

跨服务通信

自带的跨服务通信组件TemplateComfig

代码语言:java
复制
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
  • 如何调用(极简演示)
代码语言:java
复制
    public static final String pay_url = "http://localhost:8001";

    @Resource
    private RestTemplate restTemplate;

    @PostMapping("/consumer/pay/select")
    public ResultVO selectOrder(@RequestBody PayDTO pay){
        return restTemplate.postForObject(pay_url+"/pay/select", pay, ResultVO.class);
    }

抽取共性API模块

我们在具体的业务模块,为了不暴露某些信息,选择将具体的实现对象封装为 DTO 对象进行返回。那么模块调用方同样需要准备一个相同的 DTO 对象来接收数据。两个模块同时包含同一份代码,不满足微服务模块的设计初衷。

所以基于此类情况,建议创建一个公共的模块用于各类 api 请求接收发送和对象数据传输。

按照上文顺序创建一个 cloud-api 模块,将数据传输对象 DTO、数据返回对象 ResultVO、全局异常处理 GlobalException 、基础工具类 CloudUtil 等各模块所使用的公共代码存放至该模块。模块由于作为一个公共 api 使用,所以不含 application.yml,不含启动类,pom 文件中也只引入使用到的基础依赖。

当上述流程完成后,点击 maven - install 进行打包,结束后会在 target 文件夹内生成一个 jar 包。

代码语言:xml
复制
        <!--引入自建api模块-->
        <dependency>
            <groupId>org.example.cloud</groupId>
            <artifactId>cloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringCloud简介
  • 创建项目及依赖相关
  • 跨服务通信
  • 抽取共性API模块
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档