服务监控平台:SpringBoot Admin入门应用

这篇具有很好参考价值的文章主要介绍了服务监控平台:SpringBoot Admin入门应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在日常工作中,我们需要有一款监控平台来帮助我们管理服务,监控服务是否宕机、服务运行指标(内存、虚拟机、线程、请求等)、监控日志、管理服务(服务下线)等,SpringBoot Admin作为一款开源的监控平台,开发对接方便,只需要配置好服务和监控信息,定时拉取即可。其github地址为https://github.com/topics/spring-boot-admin

SpringBoot Admin简单使用

首先,创建我们的监控服务端,注意,spring-boot-admin-starter-server的版本和spring-boot-starter的版本要一致,引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.5.4</version>
</dependency>

在启动类上添加@EnableAdminServer注解,启动,访问localhost:8080
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
接下来,创建一个被监控服务,这里,需要引入的就是client,引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.5.4</version>
</dependency>

接着,在配置文件配置服务端地址,表示客户端可被监控并启动客户端

spring.boot.admin.client.url=http://localhost:8080

服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
可以看到,监控平台上注册了一个客户端服务,点击可以查看详情,然后我们配置默认的health配置,因为health默认开启,所以只需要配置详细信息展示即可,添加配置management.endpoint.health.show-details=always
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
当然,除了健康信息外,还有其他很多指标,我们添加配置开启所有监控项

##默认health,*代表所有,开放的监控信息
management.endpoints.web.exposure.include=*
##注意,如果是yml配置文件,*值需要用单引号或双引号标记,"*"或'*'

服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
从上图可以看到,我么你可以健康服务的性能、jvm、缓存等多种信息

端点actuator

在映射中,有很多请求,大部分由/actuator开头,我们访问localhost:8081/actuator可以获取数据,注意,这里是监控的服务,不是监控本身,返回的是一系列端点路径
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
actuator提供了springboot生产就绪功能,通过端点的配置与访问,获取端点信息,端点描述了一组监控信息,SpringBoot提供了多个内置端点,也可以自定义端点(监控原理),访问当前应用所有端点信息:/actuator,访问端点详细信息:/actuator/端点名称
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
在应用程序启动日志可以看到,开放了13个端点,而上面我们配置中*号是web端展示的端点(对外暴露),实际端点是否开放,是由management.endpoint.xxx.enable决定的,例如

#关闭信息端点
management.endpoint.info.enabled=false

注意,对于health属性,enable必须为true,默认开放

日志

监控控制台还可以查看服务日志,我们先配置好服务端的日志配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--<include resource="org/springframework/boot/logging/logback/defaults.xml" />-->
    <contextName>logback</contextName>
    <property name="log.path" value="./logs/my.log"/>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>

新建一个测试方法,主要打印各种级别的日志信息

@RequestMapping("/log")
public void log(){
    logger.info("我是info级别日志===========");
    logger.warn("我是warn级别日志===========");
    logger.error("我是error级别日志=========");
}

然后,最重要的是,在配置文件开启日志,并配置好日志的路径

#日志
management.endpoint.logfile.enabled=true
management.endpoint.logfile.external-file=D:/project/springboot_service/logs/my.log

启动项目,调用接口http://localhost:8081/test/log可以在控制台的日志栏看到我们配置的日志,先看日志文件
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
在下面还有一个日志配置,点进去可以发现,是针对日志级别和对应类的配置,最上面可以管理所有类的日志打印级别,下面也可以分别设置单独的类的级别,我们将所有日志改成error,再查看日志
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
再次请求接口,查看日志,发现只有error级别的日志,其他日志不显示
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java

自定义端点

1、info端点

自定义信息,例如配置文件添加info.author=zy info.desc=spring_boot_admin_test,可以看到监控控制台如下
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
当然,这些只是基本的静态信息,那么如何获取动态信息呢?
我们定义一个InfoConfig,实现InfoContributor接口,重写contribute方法,通过builder.withDetails或builder.withDetail构建想要动态获取的信息,每次刷新,信息动态变化

package org.example.actuator;

import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Component
public class InfoConfig implements InfoContributor {
    private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    @Override
    public void contribute(Info.Builder builder) {
        Map map = new HashMap();
        map.put("runTime",sdf.format(new Date()));
        builder.withDetails(map);
    }
}

服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java

2、health端点

首先要说明,health端点不能同上配置文件操作,我们可以添加pom文件中中间件,例如redis,控制台
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
当然,也支持自定义,方式同上,继承AbstractHealthIndicator类,实现doHealthCheck方法,builder有三个方法去自定义,支持多个状态信息up、down、unknown等,也可以通过builder.status(xxx)设置,通过这个可以自定义监控组件信息
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java

package org.example.actuator;

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;

@Component
public class HealthConfig extends AbstractHealthIndicator {
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        builder.withDetail("test",System.currentTimeMillis());
        builder.up();
    }
}

服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java

3、metrics端点

通过融合业务,去操作,这里主要监控性能,即接口调用信息

package org.example.ctrl;

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class controller {
    @RequestMapping("/hello")
    public String hello(){
        //每次执行,监控+1
        counter.increment();
        return "hello";
    }
    private Counter counter;
    public controller(MeterRegistry meterRegistry){
        counter = meterRegistry.counter("用户操作次数:");
    }
}

服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
然后调用接口,http://localhost:8081/test/hello观察指标
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java

4、自定义端点

新建自定义端点类,在类上声明@Endpoint(id = "my",enableByDefault = true)注解将其定义为端点,其中,id为端点的名称,名称不可包含特殊字符,例如"_",否则会报错;enableByDefault代表是否开启端点,也可以通过上面配置文件的方式开启,记下来,定义端点的行为,声明一个方法,用@ReadOperation注解声明,当启动项目的时候可被actuator读取管理

package org.example.actuator;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
//定义端点,后面enable可通过配置文件开启,名称不可包含特殊字符,例如_,否则会报错
@Endpoint(id = "my",enableByDefault = true)
public class MyEndpoint {
    @ReadOperation
    public Map test(){
        System.out.println("======================================");
        System.out.println("===============hello==================");
        System.out.println("======================================");
        Map map = new HashMap();
        map.put("aaa","111");
        return map;
    }
}

服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java

Admin的安全性

直到现在,我们的Admin控制台是可以直接访问的,现在考虑给它设置账号密码,首先,引入security依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.5.4</version>
</dependency>

创建一个SecurityConfig配置类,设置好拦截路径

package org.example.config;
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.stereotype.Component;

@Component
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    private final String adminContextPath;
    public SecurityConfig(AdminServerProperties adminServerProperties){
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Override
    protected void configure(HttpSecurity security) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler handler = new SavedRequestAwareAuthenticationSuccessHandler();
        handler.setTargetUrlParameter("redirectTo");
        security.authorizeRequests()
                .antMatchers( adminContextPath + "/assets/**" ).permitAll()
                .antMatchers( adminContextPath + "/login" ).permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage( adminContextPath + "/login" ).successHandler( handler ).and()
                .logout().logoutUrl( adminContextPath + "/logout" ).and()
                .httpBasic().and()
                .csrf().disable();
    }
}

然后,在配置文件配置用户名和密码,重新启动,即可看到需要账号密码登录

spring.security.user.name=admin
spring.security.user.password=123456

服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
登录之后,发现我们的客户端虽然启动,但是没有服务实例,这是因为我们的客户端连不上admin了,需要在客户端的配置文件添加admin的账户信息,然后重启,注册成功

spring.boot.admin.client.username=admin
spring.boot.admin.client.password=123456

监控通知

既然是服务监控,那么就要求它能够实时提醒我们服务的状态,也就是做到即时通知,这里,我们采用邮件的方式实现。首先,我们需要有一个可以对外发送邮件的邮箱,我这里使用的163邮箱,我们在设置里找到SMTP,并开启,这里会给一个授权码,一定保存好不要泄露
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
然后,在Admin服务添加邮箱依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.5.4</version>
</dependency>

在配置文件配置我们的发送邮箱,接收邮箱以及账户信息等

#163的smtp
spring.mail.host=smtp.163.com
#邮箱
spring.mail.username=开启smtp的@163.com
#开启的授权码,保存好,不要泄露
spring.mail.password=授权码
#发件人邮箱
spring.boot.admin.notify.mail.from=开启smtp的@163.com
#收件人邮箱
spring.boot.admin.notify.mail.to=接收邮箱,可以随意

然后,重启我们的Admin服务,将客户端下线,可以在接收邮箱收到邮件
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
同理,再次上线客户端服务,也会收到上线邮件。

配置注册中心

目前,我们测试是单应用,到了实际生产过程,会有很多服务需要监控,因此,而且每个服务不止单个节点部署,甚至监控平台也不是单节点部署,那么我们再直连就不太合适,现在,考虑将监控服务和客户端接入注册中心,让监控平台自动拉取注册到注册中心的客户端信息。这步操作也很简单,只需要配置到同一个注册中心即可,下面展示几个注册中心的接入示例。

1、zookeeper

首先,我们给客户端和监控平台添加相应的依赖

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <version>3.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
            <version>3.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

	<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

有了微服务的依赖,接下来就需要开启服务注册与发现,这个只需要一个注解即可搞定

@EnableDiscoveryClient

接下来,我们先配置监控平台的配置文件,只需简单配置如下内容即可,因为我们的监控平台不需要注册从而被拉取,因此设置register属性为false

#zookeeper地址,默认localhost:2181
spring.cloud.zookeeper.connect-string=192.168.136.128:2181
#zookeeper的存储路径,node节点,默认/services
spring.cloud.zookeeper.discovery.root=/springboot_admin
#当前服务是否注册,默认true
spring.cloud.zookeeper.discovery.register=false

然后,设置服务端的配置文件,首先要把直连的配置注释spring.boot.admin.client.url=http://localhost:8080接下来配置如下内容

#应用名称
spring.application.name=springboot-service
#zookeeper地址
spring.cloud.zookeeper.connect-string=192.168.136.128:2181
#zookeeper的存储路径,node节点,默认/services
spring.cloud.zookeeper.discovery.root=/springboot_admin

然后,分别启动监控平台和客户端,查看效果,可以看到有服务暴露及zookeeper的信息
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java

nacos

同上,我们引入nacos的依赖

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.9.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependencyManagement>
        <dependencies>
            <!--Spring Cloud Alibaba 相关依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

开启服务发现@EnableDiscoveryClient,然后配置监控服务

spring.application.name=springboot-admin
#监控服务不注册
spring.cloud.nacos.discovery.register-enabled=false
#nacos地址
spring.cloud.nacos.discovery.server-addr=192.168.136.128:8848
#nacos组
spring.cloud.nacos.discovery.group=springboot_admin
#命名空间id
spring.cloud.nacos.discovery.namespace=9cdb536e-9009-4ce4-abe9-fe33856d2a6d

然后配置客户端

#应用名称
spring.application.name=springboot-service
#nacos地址
spring.cloud.nacos.discovery.server-addr=192.168.136.128:8848
#nacos组
spring.cloud.nacos.discovery.group=springboot_admin
#命名空间id
spring.cloud.nacos.discovery.namespace=9cdb536e-9009-4ce4-abe9-fe33856d2a6d

分别启动监控服务和客户端服务,然后查看nacos服务注册列表
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
再登录监控平台,查看服务,服务注册成功
服务监控平台:SpringBoot Admin入门应用,中间件相关,spring boot,后端,java
这里,我们简单介绍了两种常见的服务注册中心的配置,其他的还有eurake、consul等,如果需要使用,按照上述流程对照对应的注册中心配置即可,在github官网也给出了配置示例可以参考

总结

至此,我们实现了监控平台的部分功能,同时,我们实现了服务端和客户端注册到nacos等注册中心,进行微服务化的调用,当然,这里只是针对示例服务去处理的,实际应用还要结合服务场景进行具体实现。文章来源地址https://www.toymoban.com/news/detail-654373.html

到了这里,关于服务监控平台:SpringBoot Admin入门应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分布式应用】zabbix:代理服务器、及监控其它应用

    分布式监控的作用: 分担 server 的集中式压力 解决多机房之间的网络延时问题 agent -- proxy -- server 配置 Mariadb yum源 初始化数据库 创建数据库并指定字符集 创建 zabbix 数据库用户并授权 导入数据库信息 修改 zabbix-proxy 配置文件 在所有主机上配置 hosts 解析 点击左边菜单栏【配

    2024年02月13日
    浏览(55)
  • 可以与宝塔共存的一个 “魔法” 服务器状态监控应用 ——xui

    之前有一期我们搭建了一个服务器监控,颜值非常不错,这期我们再来搭建一个 “特殊” 的服务器监控 ——XUI。 不仅可以监控服务器的数据,还可以干一些高级的,大家感兴趣的事情。 重要的是,它可以和宝塔面板共存! 一个非常直观,简洁大气的监控面板。 系统状态监

    2024年02月02日
    浏览(51)
  • 【Spring Boot Admin】客户端服务无法注册到监控平台的相关问题及解决方案

    1、客户端服务整合了Spring Security 通过URL注册,需在客户端服务中添加如下配置 通过注册中心注册,需在客户端服务中添加如下配置 2、客户端服务配置了server.port.context-path参数,并且客户端服务通过注册中心注册 需在客户端服务中添加如下配置 3、Spring Boot Admin 监控平台使

    2024年02月16日
    浏览(59)
  • Linux分布式应用 Zabbix监控配置[添加主机 自定义监控内容 邮件报警 自动发现/注册 代理服务器 高可用集群]

    关闭防火墙  服务端和客户端都配置时间同步 服务端和客户端都设置 hosts 解析 设置 zabbix 的下载源,安装 zabbix-agent2 修改 agent2 配置文件 启动 zabbix-agent2 在服务端验证 zabbix-agent2 的连通性 在 Web 页面中添加 agent 主 机 点击左边菜单栏【配置】中的【主机】,点击【创建主机

    2024年02月13日
    浏览(59)
  • 微服务应用性能分析实战07 数据可视化:多数据源让 Grafana 监控报警更高效

    这一讲我将带领你学习可视化监控套件 Grafana。Grafana 是一个开源的数据可视化的平台,所以它既不会监控应用,也不会产生监控数据,更不会对接原始数据进行分析存储。 它仅专注数据可视化本身 。 本节内容,会先通过与上一节 Kibana 可视化套件对比,来讲述 Grafana 的核心

    2024年02月05日
    浏览(50)
  • 基于DevEco Studio的OpenHarmony应用原子化服务(元服务)入门教程

    一、创建项目   二、创建卡片   三、应用服务代码 Index.ets 四、卡片代码 WidgetNewCard.ets 五、运行案例   六、案例卡片效果 注释说明: 现最新版的DevEco Studio中OpenHarmony项目在本目录下调整。将runtimeOS:””中间内容调为OpenHarmony即可。这种方式,不用开发板,通过预览器就可

    2024年02月05日
    浏览(49)
  • Json在SpringBoot/SpringCloud微服务中的应用

    Json(JavaScript Object Notation,JavaScript 对象简谱),是一种轻量级的数据交换格式。易于人阅读和编写,可以在多种语言之间进行数据交换; 在当下流行的分布式服务开发中,前后端交互、后端之间的接口交互,一般都使用json格式的数据。因此,你只要做后端研发,就很难绕过

    2024年02月09日
    浏览(34)
  • 如何基于Akamai IoT边缘平台打造一个无服务器的位置分享应用

    与地理位置有关的应用相信大家都很熟悉了,无论是IM软件里的位置共享或是电商、外卖应用中的配送地址匹配,我们几乎每天都在使用类似的功能与服务。不过你有没有想过,如何在自己开发的应用中嵌入类似的功能? 本文Akamai将为大家提供一个思路,借助边缘计算技术在

    2024年02月20日
    浏览(42)
  • 49学习容器管理平台 Docker Swarm 的基本概念和应用,包括节点管理、服务编排

    Docker Swarm 是 Docker 官方提供的容器编排工具,可以管理多个 Docker 节点,并支持自动化扩展、负载均衡等功能。下面是 Docker Swarm 的基本概念和使用方法,包括节点管理和服务编排。 在 Docker Swarm 中,一个或多个 Docker 节点组成一个 Swarm 集群,其中一个节点是 Swarm Manager,负责

    2024年02月05日
    浏览(46)
  • 【SpringBoot】Spring Boot 单体应用升级 Spring Cloud 微服务

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

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包