apache-dubbo

dubbo

文档地址

dubbo 官方文档地址

https://dubbo.apache.org/zh-cn/docs/user/references/api.html

nacos 官方文档地址

https://nacos.io/zh-cn/docs/quick-start.html

nacos下载地址

https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.gz

案例代码

https://gitee.com/hailong1024/springboot-dubbo.git

组件版本

组件 版本
Spring Boot 2.7.7
dubbo 3.2.9
nacos客户端 2.4.3
nacos 2.3.0

maven依赖

xml 复制代码
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.2.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.3.0</version>
        </dependency>

单协议,单注册中心

yml配置

yaml 复制代码
dubbo:
  application:
    name: dubbo-producer
  protocol: # 单协议(dubbo)
    name: dubbo
    port: 2881
  registry: # 单注册中心
    address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=public

多注册中心

yml配置

yaml 复制代码
dubbo:
  application:
    name: dubbo-producer
  protocol: # 单协议(dubbo)
    name: dubbo
    port: 2881
  registries: # 多注册中心
    local: # 本地
      address: nacos://127.0.0.1:8848
      timeout: 1000
    dev: # 开发
      address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=public
      timeout: 1000
      default: true

服务注册

java 复制代码
@DubboService(registry = {"local"})
public class ProducerServiceImpl implements IApiService {
    @Override
    public String print(String name) {
        return name + ":hello";
    }
}

在服务注册中使用 @DubboService(registry = {"local","dev"}) 指定注册中心,可以指定多个注册中心。

多协议 (dubbo和rest协议)

yml配置

yaml 复制代码
dubbo:
  application:
    name: dubbo-producer
  registries: # 多注册中心
    local: # 本地
      address: nacos://127.0.0.1:8848
      timeout: 1000
    dev: # 开发
      address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=public
      timeout: 1000
      default: true
  protocols:  # 多协议
    dubbo: # dubbo协议
      name: dubbo
      port: 2882 # dubbo协议默认端口是20880
    rest: # rest协议
      name: rest # 
      port: 2883 # rest协议默认端口是8080
      server: jetty

dubbo接口层配置

maven依赖

xml 复制代码
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>3.13.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.13.0.Final</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
        </dependency>

接口配置

java 复制代码
@Path("/api")
public interface IApiService {

    @GET
    @Path("/print")
    String print(String name);
}

服务注册

java 复制代码
@DubboService(registry = {"local"},protocol = {"dubbo","rest"})
public class ProducerServiceImpl implements IApiService {
    @Override
    public String print(String name) {
        return name + ":hello";
    }
}

使用 @DubboService(registry = {"local"},protocol = {"dubbo","rest"}) 指定注册中心和协议

注:不推荐使用rest协议,rest会存在一些问题,比如序列化

负载均衡策略

java 复制代码
//服务端配置
@DubboService(loadbalance = "roundrobin")
//消费端配置
@DubboReference(registry = {"dev"},check = false,loadbalance = "random")
private IApiService iApiService;

loacdbalance属性指定负载均衡策略,默认是random,可选值有:random、roundrobin、leastactive、consistenthash

  • random:随机
  • roundrobin:轮询
  • leastactive:最少活跃调用数
  • consistenthash:一致性hash

集群容错机制

cluster属性指定集群容错策略,默认是failover,可选值有:failover、failfast、failsafe、failback、forking、broadcast

  • failover:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过retries="2"来设置重试次数(不含第一次)。
  • failfast:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
  • failsafe:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
  • failback:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
  • forking:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
  • broadcast:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

服务降级

histroy配置

java 复制代码
@Reference(version = "1.0.0",group = "dubbo",timeout = 1000,check = false,retries = 0,loadbalance = "roundrobin",cluster = "failfast",registry = {"dev"},mock = "com.example.dubbo.service.impl.ApiServiceMock")

mock = "com.example.springbootdubboconsumer.mock.ApiServiceMock"

java 复制代码
public class ApiServiceMock implements IApiService {
    @Override
    public String print(String name) {
        return "print:服务降级"+System.currentTimeMillis();
    }
}

常见配置

dubbo启动检查

@DubboReference(check = false) // 关闭启动检查,默认为true,消费端会从注册中心检测提供端服务是否存在。

dubbo超时配置

@DubboReference(timeout = 1000) // 配置超时时间,单位毫秒,默认是1000ms

dubbo重试次数

@DubboReference(retries = 2) // 配置重试次数,默认是2次,不含第一次调用。

dubbo版本控制

@DubboReference(version = "1.0.0") // 配置版本号,默认是*,表示所有版本。

dubbo分组控制

@DubboReference(group = "dubbo") // 配置分组,默认是*,表示所有分组。

dubbo多版本控制

@DubboReference(version = "1.0.0",group = "dubbo") // 配置多版本,默认是*,表示所有版本。

dubbo多注册中心

@DubboReference(registry = {"local","dev"}) // 配置多注册中心,默认是*,表示所有注册中心。

dubbo多协议

@DubboReference(protocol = {"dubbo","rest"}) // 配置多协议,默认是*,表示所有协议。

dubbo多注册中心多协议

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"}) // 配置多注册中心多协议,默认是*,表示所有注册中心所有协议。

dubbo多注册中心多协议多版本

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo") // 配置多注册中心多协议多版本,默认是*,表示所有注册中心所有协议所有版本。

dubbo多注册中心多协议多版本多分组

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false) // 配置多注册中心多协议多版本多分组,默认是*,表示所有注册中心所有协议所有版本所有分组。

dubbo多注册中心多协议多版本多分组多重试次数

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false,loadbalance = "roundrobin") // 配置多注册中心多协议多版本多分组多重试次数,默认是*,表示所有注册中心

所有协议所有版本所有分组所有重试次数。

dubbo多注册中心多协议多版本多分组多重试次数多超时时间

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false,loadbalance = "roundrobin",cluster = "failover") // 配置多注册中心多协议多版本多分组多重试次数多超时

时间,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间。

dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false,loadbalance = "roundrobin",cluster = "failover",filter = "myFilter") // 配置多注册中心多协议多版本多分组

多重试次数多超时时间多负载均衡策略,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略。

dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false,loadbalance = "roundrobin",cluster = "failover",filter = "myFilter",interface = IApiService.class) // 配置多注册

中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器。

dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false,loadbalance = "roundrobin",cluster = "failover",filter = "myFilter",interface = IApiService.class,timeout = 1000

) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口。

dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false,loadbalance = "roundrobin",cluster = "failover",filter = "myFilter",interface = IApiService.class,timeout = 1000) // 配置多注册中心多协议多版本多

分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间。

dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false,loadbalance = "roundrobin",cluster = "failover",filter = "myFilter",interface = IApiService.class,timeout = 1000

,check = false) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间所有检查。

dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查多重试次数

@DubboReference(registry = {"local","dev"},protocol = {"dubbo","rest"},version = "1.0.0",group = "dubbo",retries = 2,timeout = 1000,check = false,loadbalance = "roundrobin",cluster = "failover",filter = "myFilter",interface = IApiService.class,timeout = 1000

,check = false,retries = 2) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查多重试次数,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间所有检查所有重试次数。

优先级配置

方法层级别的配置优先于接口层面,接口层配置优先于全局配置

如果级别一致,客户端的配置优先,服务端次之

dubbo泛化

泛化调用:泛化接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务Mock框架,可通过泛化调用实现。

泛化调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务Mock框架,可通过泛化调用实现。

服务端

java 复制代码
package com.example.springbootdubboproducer.service;

public interface IHelloService {
    String sayHello(String name);
}

消费端

java 复制代码
    @DubboReference(interfaceName = "com.example.springbootdubboproducer.service.IHelloService")
    private GenericService genericService;
    
    @GetMapping("/sayHello")
    public String sayHello(){
        return genericService.$invoke("sayHello",new String[]{"java.lang.String"},new Object[]{"world"}).toString();
    }

多序列化支持

dubbo支持多种序列化方式,包括hessian、fastjson、kryo、protostuff等,默认使用hessian2序列化方式。

hessian2序列化方式

hessian2序列化方式是dubbo默认的序列化方式,它是一种二进制序列化方式,性能较好,但是可读性较差。

fastjson序列化方式

fastjson序列化方式是一种基于json的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。

kryo序列化方式

kryo序列化方式是一种基于二进制的序列化方式,性能较好,可读性较差,但是相对于hessian2性能较差。

maven依赖

xml 复制代码
<dependency>
    <groupId>com.esotericsoftware</groupId>
    <artifactId>kryo</artifactId>
    <version>4.0.2</version>
</dependency>

protostuff序列化方式

protostuff序列化方式是一种基于protobuf的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。

自定义序列化方式

如果dubbo自带的序列化方式不能满足需求,可以自定义序列化方式,实现com.alibaba.dubbo.common.serialize.Serialization接口,并在配置文件中配置自定义序列化方式。

json序列化方式

json序列化方式是一种基于json的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。

xml序列化方式

xml序列化方式是一种基于xml的序列化方式,性能较差,可读性较好,但是相对于hessian2性能较差。

性能调优

  1. 网络传输优化:可以通过调整网络参数、使用压缩协议等方式来优化网络传输性能。
  2. 序列化优化:可以通过调整序列化方式、使用压缩协议等方式来优化序列化性能。
  3. 线程池优化:可以通过调整线程池参数、使用线程池监控等方式来优化线程池性能。
  4. 服务端优化:可以通过调整服务端参数、使用服务端监控等方式来优化服务端性能。
  5. 客户端优化:可以通过调整客户端参数、使用客户端监控等方式来优化客户端性能。
  6. 负载均衡优化:可以通过调整负载均衡策略、使用负载均衡监控等方式来优化负载均衡性能。
  7. 集群容错优化:可以通过调整集群容错策略、使用集群容错监控等方式来优化集群容错性能。
  8. 服务治理优化:可以通过调整服务治理策略、使用服务治理监控等方式来优化服务治理性能。
  9. 服务降级优化:可以通过调整服务降级策略、使用服务降级监控等方式来优化服务降级性能。
  10. 服务限流优化:可以通过调整服务限流策略、使用服务限流监控等方式来优化服务限流性能。
  11. 服务监控优化:可以通过调整服务监控策略、使用服务监控监控等方式来优化服务监控性能。
  12. 服务调用优化:可以通过调整服务调用策略、使用服务调用监控等方式来优化服务调用性能。
  13. 服务注册优化:可以通过调整服务注册策略、使用服务注册监控等方式来优化服务注册性能。
  14. 服务发现优化:可以通过调整服务发现策略、使用服务发现监控等方式来优化服务发现性能。

dubbo缓存文件

dubbo缓存文件主要包括以下几个方面:

  1. 注册中心缓存文件:注册中心缓存文件主要用于缓存注册中心的数据,提高注册中心的性能和可靠性。
  2. 服务提供者缓存文件:服务提供者缓存文件主要用于缓存服务提供者的数据,提高服务提供者的性能和可靠性。
  3. 服务消费者缓存文件:服务消费者缓存文件主要用于缓存服务消费者的数据,提高服务消费者的性能和可靠性。
  4. 服务调用缓存文件:服务调用缓存文件主要用于缓存服务调用的数据,提高服务调用的性能和可靠性。
yaml 复制代码
dubbo:
  registry: #注册中心
    file: /path/to/registry/cache/file
  provider: #服务提供者
    file: /path/to/provider/cache/file
  consumer: #服务消费者
    file: /path/to/consumer/cache/file
  invocation: #服务调用
    file: /path/to/invocation/cache/file

dubbo-admin

简介

  1. dubbo-admin是一个可视化的dubbo管理工具,可以用于查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
  2. dubbo-admin的安装和使用非常简单,只需要将dubbo-admin的war包部署到tomcat中即可。
  3. dubbo-admin的配置文件位于/WEB-INF/dubbo.properties,可以配置注册中心的地址、dubbo-admin的端口等。
  4. dubbo-admin的界面非常友好,可以方便地查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
  5. dubbo-admin的监控功能非常强大,可以监控dubbo服务的调用次数、调用耗时、调用成功率等。
  6. dubbo-admin的配置管理功能非常强大,可以管理dubbo服务的配置、查看dubbo服务的配置历史等。
  7. dubbo-admin的日志管理功能非常强大,可以查看dubbo服务的日志、下载dubbo服务的日志等。
  8. dubbo-admin的告警功能非常强大,可以配置dubbo服务的告警规则、查看dubbo服务的告警历史等。
  9. dubbo-admin的权限管理功能非常强大,可以配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
  10. dubbo-admin的插件功能非常强大,可以安装各种插件来扩展dubbo-admin的功能。

安装

  1. 下载dubbo-admin的war包,可以从dubbo的官方网站上下载。
  2. 将dubbo-admin的war包部署到tomcat中,可以将其放在tomcat的webapps目录下。
  3. 启动tomcat,访问http://localhost:8080/dubbo-admin即可打开dubbo-admin的界面。

配置

  1. /WEB-INF/dubbo.properties文件中配置注册中心的地址、dubbo-admin的端口等。
yaml 复制代码
dubbo.registry.address=zookeeper://127.0.0.1:2181 #注册中心的地址
dubbo.admin.port=8080 #dubbo-admin的端口
  1. /WEB-INF/dubbo.properties文件中配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
yaml 复制代码
dubbo.admin.username=admin #dubbo-admin的用户名
dubbo.admin.password=admin #dubbo-admin的密码
dubbo.admin.access.log=true #是否记录dubbo-admin的访问日志
  1. /WEB-INF/dubbo.properties文件中配置dubbo-admin的告警规则、查看dubbo-admin的告警历史等。
yaml 复制代码
dubbo.admin.alert.rule=cpu_usage > 80 #dubbo-admin的告警规则
dubbo.admin.alert.history=true #是否记录dubbo-admin的告警历史
  1. /WEB-INF/dubbo.properties文件中配置dubbo-admin的插件功能、查看dubbo-admin的插件日志等。
yaml 复制代码
dubbo.admin.plugin=com.example.MyPlugin #dubbo-admin的插件
dubbo.admin.plugin.log=true #是否记录dubbo-admin的插件日志
  1. docker部署dubbo- admin
yaml 复制代码
docker run -d -p 8080:8080 --name dubbo-admin -e JAVA_OPTS="-Xmx512m -Xms512m" -e TZ=Asia/Shanghai -e DubboAdminConfig.admin.registry.address=zookeeper://127.0.0.1:2181 -e DubboAdminConfig.admin.monitor.address=nacos://127.0.0.1:
8848 dubbo-admin/dubbo-admin:latest

功能

  1. 查看dubbo服务的状态:可以查看dubbo服务的状态,包括服务的名称、版本、分组、状态等。
  2. 监控dubbo服务的性能:可以监控dubbo服务的性能,包括服务的调用次数、调用耗时、调用成功率等。
  3. 管理dubbo服务的配置:可以管理dubbo服务的配置,包括服务的权重、负载均衡策略、超时时间等。
  4. 查看dubbo服务的日志:可以查看dubbo服务的日志,包括服务的调用日志、异常日志等。
  5. 配置dubbo服务的告警规则:可以配置dubbo服务的告警规则,包括服务的调用次数、调用耗时、调用成功率等。
  6. 查看dubbo服务的告警历史:可以查看dubbo服务的告警历史,包括服务的告警时间、告警内容等。
  7. 配置dubbo-admin的访问权限:可以配置dubbo-admin的访问权限,包括用户的权限、角色的权限等。
  8. 查看dubbo-admin的访问日志:可以查看dubbo-admin的访问日志,包括用户的访问时间、访问内容等。
  9. 安装dubbo-admin的插件:可以安装dubbo-admin的插件,扩展dubbo-admin的功能。
  10. 查看dubbo-admin的插件日志:可以查看dubbo-admin的插件日志,包括插件的安装时间、插件的内容等。
  11. 查看dubbo-admin的版本信息:可以查看dubbo-admin的版本信息,包括dubbo-admin的版本号、dubbo-admin的构建时间等。
  12. 查看dubbo-admin的帮助文档:可以查看dubbo-admin的帮助文档,包括dubbo-admin的使用方法、dubbo-admin的配置方法等。
  13. 查看dubbo-admin的关于信息:可以查看dubbo-admin的关于信息,包括dubbo-admin的版权信息、dubbo-admin的开发团队等。
  14. 查看dubbo-admin的更新日志:可以查看dubbo-admin的更新日志,包括dubbo-admin的更新时间、dubbo-admin的更新内容等。
  15. 查看dubbo-admin的反馈建议:可以查看dubbo-admin的反馈建议,包括用户的反馈时间、用户的反馈内容等。
  16. 查看dubbo-admin的插件市场:可以查看dubbo-admin的插件市场,包括各种插件的介绍、插件的安装方法等。
  17. 查看dubbo-admin的插件开发文档:可以查看dubbo-admin的插件开发文档,包括插件的开发方法、插件的接口规范等。
  18. 查看dubbo-admin的插件更新日志:可以查看dubbo-admin的插件更新日志,包括插件的更新时间、插件的更新内容等。
  19. 查看dubbo-admin的插件反馈建议:可以查看dubbo-admin的插件反馈建议,包括用户的反馈时间、用户的反馈内容等。

使用

  1. 在dubbo-admin的界面中,可以查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
  2. 在dubbo-admin的监控功能中,可以监控dubbo服务的调用次数、调用耗时、调用成功率等。
  3. 在dubbo-admin的配置管理功能中,可以管理dubbo服务的配置、查看dubbo服务的配置历史等。
  4. 在dubbo-admin的日志管理功能中,可以查看dubbo服务的日志、下载dubbo服务的日志等。
  5. 在dubbo-admin的告警功能中,可以配置dubbo服务的告警规则、查看dubbo服务的告警历史等。
  6. 在dubbo-admin的权限管理功能中,可以配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
  7. 在dubbo-admin的插件功能中,可以安装各种插件来扩展dubbo-admin的功能。
相关推荐
帅逼码农1 小时前
Apache Spark
大数据·spark·apache
model20053 小时前
CentOS7 Apache安装踩坑
centos·apache
博洋科技6 小时前
关于网站的权重和百度蜘蛛爬虫的关系
小程序·dubbo·网站建设·1024程序员节·保定h5网站建设·保定网站建设
B1nna7 小时前
外卖开发(七)——校验收货地址是否超出配送范围
开发语言·dubbo·lua
mikey棒棒棒1 天前
Apache Echarts和POI
apache·echarts·poi
PersistJiao1 天前
调度系统:使用 Apache Airflow 管理和调度 Couchbase SQL 脚本的实际例子
数据库·sql·apache
开心工作室_kaic1 天前
springboot413福泰轴承股份有限公司进销存系统(论文+源码)_kaic
开发语言·php·apache
m0_748245171 天前
CVE-2024-24549 Apache Tomcat - Denial of Service
java·tomcat·apache
向阳12181 天前
Apache Doris 数据类型
apache·doris