当前位置: 首页 > news >正文

【SpringBoot】Spring Boot 单体应用升级 Spring Cloud 微服务

Spring Cloud 是在 Spring Boot 之上构建的一套微服务生态体系,包括服务发现、配置中心、限流降级、分布式事务、异步消息等,因此通过增加依赖、注解等简单的四步即可完成 Spring Boot 应用到 Spring Cloud 升级。

Spring Boot 应用升级为 Spring Cloud

Cloud Native

以下是应用升级 Spring Cloud 的完整步骤。

第一步:添加 Spring Cloud 依赖

首先,为应用添加 Spring Cloud 与 Spring Cloud Alibaba 依赖。注意根据当前应用 Spring Boot 版本选择合适的 Spring Cloud 版本,具体参见版本映射表[1]。​​​​​​

<properties>    <spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>    <spring-cloud.version>2022.0.0</spring-cloud.version></properties><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>${spring-cloud.version}</version>            <type>pom</type>            <scope>import</scope>        </dependency>        <dependency>            <groupId>com.alibaba.cloud</groupId>            <artifactId>spring-cloud-alibaba-dependencies</artifactId>            <version>${spring-cloud-alibaba.version}</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement><dependencies>    <!-- Nacos 服务发现 -->    <dependency>        <groupId>com.alibaba.cloud</groupId>        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>    </dependency>    <!-- 服务发现:OpenFeign服务调用 -->    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-openfeign</artifactId>    </dependency>  <!-- 服务发现:OpenFeign服务调用 -->    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-loadbalancer</artifactId>    </dependency></dependencies>

以上我们添加了服务注册发现、OpenFeign 等依赖。

第二步:添加配置

在应用 application.yml 或者 application.properties 文件中增加以下配置项,设置应用名、注册中心地址。

application.yml:

spring:  application:    #项目名称必填,在注册中心唯一    #最好和之前域名规范、kubernetes service名等保持一致(会作为调用与负载均衡依据)    name: service-provider  cloud:     nacos:       discovery: #启用 spring cloud nacos discovery        server-addr: 127.0.0.1:8848

application.properties:​​​​​​​

#项目名称必填,在注册中心唯一#最好和之前域名规范、kubernetes service名等保持一致(会作为调用与负载均衡依据)spring.application.name=service-provider #启用 spring cloud nacos discoveryspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

第三步:启动类增加注解

启动类增加 EnableDiscoveryClient EnableFeignClients 注解,启动服务地址自动注册与发现。​​​​​​​

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

第四步:调整服务调用方式

🔔 注意!

1. 为了保证平滑升级,请确保下游应用完成 Spring Cloud 改造并在注册中心注册服务后再进行调用方式改造。

2. RestTemplate/FeignClient 默认发起调用的 hostname (示例中的 service-provider)是对端 Spring Cloud 应用名。因此,为了保证尽可能少的改造量,改造过程中设置的应用名 spring.name=service-provider 最好和之前的命名规范保持一致。比如:

    • 如果之前有自定义域名,则和域名定义保持一致

    • 如果之前用的 Kubernetes Service,则和 Service Name 保持一致

1. RestTemplate 模式

为之前的 RestTemplate Bean 添加 @LoadBlanced 注解,使得 RestTemplate 接入服务发现与负载均衡:​​​​​​

@Bean@LoadBalancedpublic RestTemplate restTemplate() {    return new RestTemplate();}

其它原有 RestTemplate 发起调用的代码保持不变,只需调整 hostname 即可,如下所示。​​​​​​​

@RestController public class TestController {
    @Autowired    private RestTemplate restTemplate;
    @GetMapping(value = "/echo-rest/{str}")    public String rest(@PathVariable String str) {        return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);    }}

2. FeignClient 模式

使用 @FeignClient 注解将 EchoService 这个接口包装成一个 FeignClient,属性 name 对应对端应用名 spring.name=service-provider。​​​​​​

//@FeignClient(name = "service-provider", url="http://service.example.com/") @FeignClient(name = "service-provider")public interface EchoService {    @GetMapping(value = "/echo/{str}")    String echo(@PathVariable("str") String str);}

将 EchoService 作为标准 bean 注入,即可对远端服务发起请求了。​​​​​​​

@RestController public class TestController {
    @Autowired    private EchoService echoService;
    @GetMapping(value = "/echo-feign/{str}")    public String feign(@PathVariable String str) {        return echoService.echo(str);    }}

3. HtClient、自定义 HTTP 访问工具等

对于使用 HttpClient 或者自行封装 http 调用工具的用户,建议统一改造为以上 1、2 两种调用模式之一。

http://www.lryc.cn/news/260496.html

相关文章:

  • el-tree搜索的使用
  • Java使用Microsoft Entra微软 SSO 认证接入
  • “华为杯”研究生数学建模竞赛2016年-【华为杯】A题:无人机在抢险救灾中的优化运用(附获奖论文及MATLAB代码实现)
  • 17--异常处理
  • 数据结构 | c++编程实现求二叉树的叶节点的个数。(递归非递归)
  • python读取csv文件
  • 租一台服务器多少钱决定服务器的价格因素有哪些
  • 深度学习(生成式模型)——ADM:Diffusion Models Beat GANs on Image Synthesis
  • Ubuntu无法解析域名DNS指向127.0.0.53问题处理
  • Intewell-Hyper I_V2.0.0_release版本正式发布
  • Mysql mybatis 语法示例
  • 第77讲:二进制方式搭建MySQL数据库5.7版本以及错误日志管理
  • R语言,table()函数实现统计每个元素出现的频数+并将最终统计频数结果转换成dataframe数据框形式
  • 微信小程序uniapp记住密码
  • 喜报!Coremail荣获2023信创“大比武”优秀生态融合奖
  • 知识库SEO:提升网站内容质量与搜索引擎排名的策略
  • GPIO复用时5个调试接口引脚要注意
  • 华为云CodeArts Check常见问答汇总
  • linux 应用开发笔记---【信号:基础】
  • 区块链:改变世界的技术
  • 防御升级!SMC2助力企业高效应对邮箱安全挑战
  • 19.(vue3.x+vite)v-if和v-for哪个优先级更高
  • 12. IO
  • 【稳定检索|投稿优惠】2024年艺术鉴赏与社会科学教育国际会议(ICAASSE 2024)
  • leetCode算法—3.无重复字符的最长子串
  • STM32 寄存器配置笔记——USART DMA接收
  • (基础篇)通过node增删改查连接mysql数据库
  • 做为一个产品经理带你详细了解--动态面板的使用
  • 严世芸龟法养生经
  • 基于OHTPPS实现网站HTTPS访问