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

Apache Dubbo知识点表格总结

      Dubbo是一个高性能的Java RPC框架,它提供了一系列的功能来支持分布式系统的开发。通常用于微服务之间的服务调用,顺便提一下也是用于微服务之间调用的OpenFeign,OpenFeign是Spring Cloud体系中的一个声明式HTTP客户端,用于简化HTTP API的调用。在做一下Dubbo与OpenFeign对比

目录

Dubbo与OpenFeign对比

1.Dubbo 简介

2. 架构设计

3. 注册中心

4. 服务提供者

 5. 服务消费者

6. 通信协议

 7. 序列化

 8. 负载均衡

 9. 集群容错

 10. 监控中心

11. 配置管理

 12. 服务治理

 13. 动态代理

 14. 服务降级

 15. 服务路由

 16. 配置覆盖

17. 异步调用

18. 多协议支持

19. 安全性

 20. 扩展性


Dubbo与OpenFeign对比
对比项DubboOpenFeign
通信方式基于RPC,适用于更复杂的远程调用模式。基于HTTP,主要用于RESTful API的调用。
协议支持支持多种协议,如Dubbo、RMI、HTTP等。主要基于HTTP协议。
服务治理提供丰富的服务治理功能,如负载均衡、容错机制等。通常与Spring Cloud生态集成,使用Eureka进行服务治理。
性能高性能,适合高并发场景。性能相对较低,基于HTTP协议,每次调用都需要建立连接。
异步调用支持异步调用。不同于Dubbo的异步特性,Feign主要用于同步调用。
服务发现常与ZooKeeper等注册中心结合使用。与Spring Cloud集成,通常使用Eureka作为注册中心。
编程模型面向接口的编程模型,允许以调用本地方法的方式调用远程服务。声明式编程模型,通过注解定义服务接口。
集成度可以独立使用,不依赖于特定的生态。与Spring Cloud生态系统紧密集成。
断路器可以集成Hystrix等断路器实现。可以与Hystrix集成,实现断路器模式。
适用场景适合大型分布式系统,需要高性能和复杂服务治理的场景。适合微服务架构,特别是已经采用Spring Cloud生态的项目。
易用性配置相对复杂,需要一定的学习曲线。使用简便,适合快速开发和集成。
社区活跃度活跃,但可能不如Spring Cloud生态。由于是Spring Cloud的一部分,社区活跃且更新频繁。

开发者可以根据上述差异,结合自身项目的具体需求和团队的技术栈,选择最合适的服务调用框架。

1.Dubbo 简介
特性描述
定义高性能的Java RPC框架
主要功能1. 服务注册与发现  2. 负载均衡   3. 通信协议支持   4. 服务治理
特点1. 易于使用   2. 性能优异   3. 扩展性强   4. 社区活跃
适用场景分布式系统的服务调用
核心组件1. 注册中心  2. 服务提供者 3. 服务消费者    4. 监控中心
2. 架构设计
组件功能描述示例/备注
注册中心负责服务地址的注册与查找,服务提供者和消费者之间解耦的关键组件。常用ZooKeeper作为注册中心。
服务提供者提供服务的应用程序,将服务发布到注册中心供消费者调用。实现具体的服务接口,并使用@Service注解发布服务。
服务消费者调用远程服务的应用程序,从注册中心获取服务地址并发起调用。通过@Reference注解注入服务引用,调用远程服务。
监控中心用于监控服务的调用次数、调用时间等信息,便于服务治理。可以集成到注册中心,也可以独立部署。
负载均衡将请求按照某种算法分发到不同的服务提供者上。支持随机、轮询、最少活跃调用等策略。
通信协议服务提供者和消费者之间通信的协议。支持多种协议,如dubbo、rmi、http等。
序列化服务调用过程中数据的序列化和反序列化。支持hessian、java、compacted java等序列化方式。
动态代理在客户端生成服务接口的代理对象,背后实际调用远程服务。可以用于实现服务的装饰、监控等功能。
配置中心用于统一管理集群配置,如线程池、超时设置等。可以与注册中心结合使用。
集群容错当某个服务实例出现问题时,能够平滑切换到其他实例。提供Failover、Failfast、Failsafe等策略。
3. 注册中心
功能点描述示例/备注
服务注册服务提供者在启动时,向注册中心注册自己的地址信息。注册成功后,注册中心会存储服务名称与提供者地址的映射。
服务发现服务消费者在发起远程调用前,从注册中心获取服务提供者的地址。服务消费者可以根据这些地址发起调用。
健康检查定期检查服务实例的可用性,移除不健康的实例。保证调用的都是健康的服务实例。
监听机制允许服务消费者监听服务提供者的变化,如新增、下线等。当服务变更时,注册中心会推送变更信息给监听者。
配置存储存储一些服务级别的配置信息,如权重、负载均衡策略等。服务消费者可以根据这些配置信息决定调用哪个服务提供者。
高可用支持集群部署,即使部分注册中心实例故障,也不影响整体服务。通过主从、集群等部署方式实现。
扩展性允许开发者通过实现自定义接口来扩展注册中心的功能。如自定义注册、发现逻辑等。
安全性提供认证、授权机制,保证只有合法的服务实例可以注册和发现。通过用户名密码、令牌等方式实现。
4. 服务提供者
功能点描述示例/备注
服务暴露将本地服务封装成远程服务,供服务消费者调用。使用@Service注解暴露服务。
协议支持服务提供者可以配置支持的协议,如dubbo、rmi、http等。不同协议可能适用于不同的调用场景。
多协议一个服务可以同时支持多种协议,以适应不同的调用需求。通过配置多个协议标签来实现。
直连服务消费者可以绕过注册中心,直接指定服务提供者的地址进行调用。用于测试或点对点调用。
权重可以为服务提供者设置权重,影响负载均衡时的选择。权重高的提供者更可能被选中。
分组可以将同一类服务的提供者分为不同的组。用于区分不同环境或不同版本的服务。
版本服务提供者可以指定服务的版本号,消费者可以根据版本号选择服务。用于版本控制和兼容性管理。
延迟暴露允许服务在初始化完成后再暴露,避免服务启动期间的不稳定。通过配置delay属性实现。
异步调用支持异步调用,提高服务的性能。通过配置async属性开启异步调用。
容错机制实现容错机制,如重试、超时等,提高服务的稳定性。通过配置retriestimeout等参数实现。
 5. 服务消费者
功能点描述示例/备注
服务引用通过@Reference注解在服务消费者应用中注入服务引用。可以像调用本地方法一样调用远程服务。
服务发现从注册中心动态发现服务提供者的地址,并根据负载均衡策略选择一个地址进行调用。服务消费者可以根据注册中心的变更实时更新可用的服务列表。
集群容错支持集群调用,当调用失败时,可以自动切换到另一个服务提供者。通过配置集群策略,如Failover、Failfast等。
异步调用支持异步调用远程服务,提高消费者端的响应速度。通过配置async属性开启异步调用。
多版本兼容可以指定要调用的服务版本,实现版本兼容。用于服务升级和版本控制。
分组可以指定调用特定分组的服务提供者。用于环境隔离或功能划分。
超时设置可以为服务调用设置超时时间,避免调用长时间挂起。通过配置timeout属性设置。
重试机制可以为服务调用设置重试次数,提高调用的鲁棒性。通过配置retries属性设置。
负载均衡可以指定负载均衡策略,如随机、轮询等。通过配置loadbalance属性设置。
过滤器可以自定义过滤器,对请求和响应进行拦截处理。如日志记录、监控、安全控制等。
连接控制可以控制每个服务消费者与服务提供者之间的连接数。通过配置连接数限制,避免资源耗尽。
6. 通信协议
协议名称描述特点示例/备注
DubboDubbo默认的协议,基于TCP的长连接协议。高效的序列化,适用于大中型规模的分布式系统。默认端口为20880。
RMIJava远程方法调用协议。基于Java原生的分布式对象,适用于Java应用间的调用。默认端口为1099。
Hessian一种二进制Web服务协议。跨语言支持,轻量级,适用于简单的远程服务调用。需要配置相应的端口。
HTTP基于HTTP的协议,支持RESTful接口。跨语言,易于使用,适合与浏览器或移动设备进行交互。端口可以自定义。
Web ServiceSOAP协议的实现,适用于企业级应用。规范严格,适合企业级应用,与B2B交互。需要配置相应的端口。
ThriftFacebook开发的跨语言服务接口定义和通信框架。高效的二进制协议,适合数据量大的服务调用。需要配置相应的端口。
Memcached一种高性能的分布式内存缓存系统。主要用于缓存调用,提高性能。通常与Dubbo协议结合使用。
Redis一个开源的内存数据库,用作数据库、缓存和消息代理。支持多种数据结构,可以作为Dubbo的缓存层。通常与Dubbo协议结合使用。
ZooKeeper一个分布式协调服务,用于维护配置信息、命名、提供分布式同步等。常用作Dubbo的注册中心和分布式锁。默认端口为2181。
自定义协议允许开发者根据需要实现自定义的通信协议。灵活性高,可以针对特定场景进行优化。需要实现Dubbo的协议接口
 7. 序列化
序列化方式描述特点示例/备注
Java序列化Java原生序列化方式。与Java平台紧密集成,但序列化和反序列化速度较慢。通常不推荐用于分布式系统中。
Hessian一种二进制Web服务协议,用于序列化。跨语言支持,序列化速度快,常用于Dubbo协议。支持自定义类的定义。
JSON轻量级的数据交换格式。易于人阅读和编写,跨语言支持,但序列化效率不如二进制协议。常用于HTTP协议。
XML一种标记语言,用于序列化。可读性强,但数据体积大,传输效率低。常用于Web Service协议。
ProtobufGoogle开发的协议缓冲区,用于序列化。跨语言支持,序列化速度快,数据体积小。需要预先定义数据结构。
KryoJava库,用于高效序列化。序列化速度快,数据体积小,但跨语言支持不如Hessian。可以作为Java序列化的替代。
FST高性能的Java序列化库。比Java原生序列化更快,支持复杂对象的序列化。需要额外的类定义。
自定义序列化允许开发者实现自定义的序列化方式。可以针对特定场景进行优化,提高性能。需要实现相应的序列化接口。
 8. 负载均衡
策略名称描述适用场景示例/备注
Random随机选择服务实例进行调用。适用于服务实例数量多,负载较平均的场景。默认策略,简单,但可能造成部分实例过载。
Round Robin轮询选择服务实例,按请求顺序轮流分配。适用于服务实例性能相近的场景。可以实现简单的负载均衡。
Least Active选择活跃数(如线程数或请求数)最少的服务实例。适用于服务实例性能不同,希望更均匀分配请求的场景。可以减少对繁忙服务实例的调用。
Consistent Hash根据请求参数(如用户ID)进行哈希,选择固定的服务实例。适用于需要保持会话一致性的场景。可以避免相同请求被分发到不同实例。
Weighted Random根据实例权重随机选择服务实例。适用于服务实例性能不均或希望控制流量分配的场景。权重高的实例被选中的概率更大。
Weighted Round Robin根据实例权重轮询选择服务实例。适用于服务实例性能不均,希望按比例分配请求的场景。权重高的实例会被分配更多请求。
Custom实现自定义负载均衡策略。适用于有特殊负载均衡需求的场景。需要实现Dubbo的负载均衡接口。
 9. 集群容错
策略名称描述适用场景示例/备注
Failover失败自动切换,当出现失败时,重试其他服务器。适用于读操作多且对响应时间敏感的业务。默认策略,最常用。
Failfast快速失败,只发起一次调用,失败立即报告。适用于写操作,如新增订单不能重复插入。不会重试,节省资源。
Failsafe安全失败,出现异常时忽略,不抛出异常。适用于不重要的调用,即使调用失败也不会影响主业务。调用返回结果将为null。
Failback失败自动恢复,后台记录失败请求,定时重发。适用于消息通知操作。需要配合后台调度任务。
Forking并行调用多个服务器,只要一个成功就返回。适用于实时性要求高的读操作。会发起多个调用,增加系统压力。
Broadcast广播调用,逐个调用所有提供者。适用于更新本地缓存或内存数据。所有调用都将被执行,响应时间取决于最慢的服务提供者。
Custom实现自定义容错策略。适用于有特殊容错需求的业务。需要实现Dubbo的容错策略接口。
 10. 监控中心
监控项描述功能示例/备注
调用次数统计服务的调用次数。用于评估服务的繁忙程度。可以设置阈值,超过阈值时触发报警。
调用时间统计服务调用的响应时间。用于评估服务的性能。可以监控平均响应时间和最大响应时间。
成功率统计服务调用的成功次数与失败次数。用于评估服务的稳定性。失败次数过多时,可能需要检查服务健康状况。
调用链跟踪服务调用的完整路径。用于问题排查和性能优化。可以结合日志系统,实现调用链的完整跟踪。
系统负载监控服务提供者的系统负载。用于评估服务提供者的资源使用情况。包括CPU使用率、内存使用情况等。
线程池监控服务提供者的线程池状态。用于评估服务处理能力。包括线程池的当前工作线程数、队列长度等。
GC监控监控服务提供者的垃圾回收情况。用于评估服务的内存使用效率。包括GC次数、GC耗时等。
日志记录记录服务调用的详细日志。用于问题排查和日志分析。可以自定义日志格式和日志级别。
自定义监控支持开发者自定义监控项。用于实现特定的监控需求。需要实现Dubbo的监控接口。
集成外部监控系统支持与外部监控系统(如Prometheus、Grafana)集成。用于统一监控和管理。需要配置相应的集成插件或中间件。

 监控可以使用Dubbo自身的监控工具Dubbo Admin,我之前写过安装部署教程:安装使用dubbo-admin管理台进行服务监控和服务治理-CSDN博客

11. 配置管理
配置项描述功能示例/备注
服务地址配置服务提供者的具体地址信息。用于指定服务调用的目标地址。可以是IP地址或主机名,通常与端口号一起使用。
注册中心地址配置注册中心的地址信息。用于服务注册与发现。可以是注册中心的IP地址或服务名。
协议配置服务使用的通信协议。用于指定服务调用的协议类型。如dubbo, rmi, http等。
端口配置服务监听的端口号。用于指定服务的网络访问端口。通常与协议一起使用。
超时时间配置服务调用的超时时间。用于避免服务调用长时间挂起。可以针对不同的服务进行个性化配置。
重试次数配置服务调用的重试次数。用于提高服务调用的鲁棒性。默认为2,可以根据需要调整。
负载均衡策略配置负载均衡的策略。用于在多个服务提供者之间分配请求。如random, roundrobin等。
集群策略配置集群调用的策略。用于处理服务调用失败时的行为。如failover, failfast等。
序列化方式配置数据序列化的方式。用于指定服务调用过程中数据的序列化和反序列化方式。如hessian, json等。
连接数限制配置每个服务消费者与服务提供者之间的最大连接数。用于避免资源耗尽。默认值通常为200。
配置覆盖允许在运行时通过外部配置覆盖默认配置。用于灵活调整服务行为。可以是XML, Properties, 或者通过API动态设置
 12. 服务治理
治理策略描述功能示例/备注
服务分组将同一类服务划分为不同的组。用于环境隔离或功能划分。如开发环境、测试环境和生产环境可以有不同的服务分组。
版本控制为服务提供版本号,支持多版本的服务并存。用于服务升级和兼容性管理。消费者可以根据需要指定调用服务的特定版本。
依赖检查在服务启动时检查依赖服务是否可用。用于避免因依赖服务不可用导致的启动失败。可以配置检查的严格程度。
服务降级在服务不可用时,提供备选的处理逻辑。用于提高系统的可用性。如服务调用失败时返回默认值或进行容错处理。
访问限流控制服务的访问频率,防止过载。用于保护服务不被滥用。可以配置QPS(每秒查询率)限制。
黑白名单配置允许或禁止访问服务的客户端列表。用于访问控制。可以精确控制哪些客户端可以访问服务。
动态配置支持在运行时动态调整服务的配置。用于快速响应业务变化。可以通过管理控制台或API进行配置。
服务路由根据特定规则将请求分发到不同的服务提供者。用于实现地域性路由、故障转移等。可以根据用户ID、地区等信息进行路由。
服务权重为服务提供者设置不同的权重,影响负载均衡时的选择。用于流量分配。权重高的提供者将获得更多的请求。
服务预热在服务启动后,延迟对外提供服务的时间。用于避免服务启动期间的不稳定。可以配置预热时间。
日志管理配置服务调用的日志记录策略。用于问题排查和性能分析。可以配置日志级别和输出格式。
 13. 动态代理
功能点描述应用场景示例/备注
接口代理在客户端生成服务接口的代理对象,背后实际调用远程服务。客户端无需感知远程调用的具体细节。使用ReferenceConfig生成代理对象。
隐式传参框架层面传递的参数,如调用方IP、端口等。用于实现非业务层面的功能,如日志记录、权限验证等。无需用户手动传递。
异步调用通过代理对象调用服务时,可以配置为异步。用于提高性能,减少等待时间。需要在代理对象上设置异步调用参数。
服务降级当服务调用失败时,代理对象可以返回一个默认值或备选逻辑。用于提高系统的可用性。需要在代理对象上配置降级策略。
超时控制控制服务调用的超时时间。避免调用长时间挂起。可以在代理对象上设置超时时间。
重试机制当服务调用失败时,可以自动重试。提高服务调用的鲁棒性。可以在代理对象上设置重试次数。
连接控制控制每个服务消费者与服务提供者之间的连接数。避免资源耗尽。可以在代理对象上设置最大连接数。
调用拦截可以在服务调用前后执行一些自定义逻辑。如统计、日志、事务管理等。实现Filter接口进行拦截。
日志打印记录服务调用的日志信息。用于问题排查和性能分析。可以通过代理对象配置日志级别。
监控数据采集通过代理对象采集调用次数、调用时间等监控数据。用于服务性能的监控和管理。监控数据可以被发送到外部监控系统。
 14. 服务降级
功能点描述应用场景示例/备注
失败降级当服务调用失败时,返回一个预设的备选响应。用于提高系统的可用性,避免服务失败导致的级联效应。例如,服务超时或调用失败时,返回默认值或错误信息。
强制降级在某些条件下(如高负载),强制使用备选逻辑。用于系统保护,防止过载。可以在配置中设置特定条件下的降级规则。
本地降级在远程服务不可用时,使用本地方法作为备选。用于保证核心业务流程的持续运行。需要在本地实现相应的备选逻辑。
依赖降级当依赖服务不可用时,降级为使用一个或多个备选服务。用于保证服务的高可用性。需要在配置中指定备选服务。
热点参数降级根据热点参数(如用户ID、商品ID)进行降级。用于应对特定参数的高并发访问。可以针对特定参数配置降级策略。
容错策略实现容错逻辑,如重试、熔断等。用于提高系统的稳定性和弹性。需要在服务调用中实现相应的容错机制。
配置管理动态调整降级规则,无需重启服务。用于快速响应业务变化。可以通过管理控制台或API动态设置降级规则。
降级数据采集采集服务降级的相关信息,如降级次数、原因等。用于监控和服务优化。降级数据可以被发送到外部监控系统。
 15. 服务路由
功能点描述应用场景示例/备注
条件路由根据条件表达式将请求路由到不同的服务提供者。用于实现业务规则导向的服务调用。例如,根据用户地域信息将请求路由到最近的服务节点。
脚本路由使用脚本语言(如JavaScript)来决定路由规则。用于实现复杂的路由逻辑。脚本可以根据请求内容动态决定路由结果。
服务区域路由根据服务提供者的区域信息进行路由。用于实现地理区域性服务调用。例如,将请求路由到用户所在区域的服务节点以减少延迟。
集群容错路由用于在集群调用失败时,提供备选的服务提供者。用于提高服务调用的成功率。可以配置失败重试的策略。
依赖项路由根据服务依赖关系进行路由。用于实现服务之间的依赖调用。例如,服务B依赖服务A,那么服务B的调用将路由到服务A的提供者。
标签路由根据服务提供者的标签属性进行路由。用于实现基于特定属性的服务调用。例如,将请求路由到带有特定标签的服务提供者。
优先级路由根据服务提供者的优先级进行路由。用于实现服务调用的优先级控制。高优先级的服务提供者将优先被调用。
黑白名单路由根据预设的黑白名单进行路由。用于实现服务调用的访问控制。只有白名单中的服务提供者可以接受请求。
自定义路由实现自定义的路由规则。用于实现特殊的路由需求。需要实现Dubbo的路由规则接口
 16. 配置覆盖
配置项描述应用场景示例/备注
服务名称可以覆盖服务的名称,以区分不同的服务实现。用于实现同一个接口的不同服务。例如,可以配置两个服务提供者分别为MyService-impl1MyService-impl2
版本号可以覆盖服务的版本号,以实现版本控制。用于服务升级和兼容性管理。消费者可以根据版本号选择调用特定版本的服务。
分组可以覆盖服务的分组,以实现服务隔离。用于开发、测试、生产环境的服务隔离。例如,可以为开发环境的服务配置分组为dev
URL可以覆盖服务的URL,以指定调用的具体地址。用于点对点直连或测试特定服务实例。可以指定协议、主机、端口以及参数。
负载均衡可以覆盖服务的负载均衡策略。用于调整服务调用的负载均衡行为。如指定使用roundrobinrandom策略。
集群策略可以覆盖服务的集群调用策略。用于调整服务调用的集群行为。如指定使用failoverfailfast策略。
连接数可以覆盖服务消费者与提供者之间的连接数。用于调整网络连接资源的使用。可以限制每个服务消费者与提供者之间的最大连接数。
超时时间可以覆盖服务调用的超时时间。用于调整服务调用的超时设置,避免长时间等待。超时时间可以是整数,表示毫秒。
重试次数可以覆盖服务调用的重试次数。用于提高服务调用的鲁棒性。重试次数可以是整数,表示重试的次数。
自定义配置可以添加自定义的配置项。用于实现特殊的配置需求。可以覆盖Dubbo默认的配置,或者添加额外的配置参数。
17. 异步调用
功能点描述应用场景示例/备注
异步执行服务调用时,客户端不会立即返回结果,而是在后台异步处理。用于提高响应速度,特别是在处理非实时性业务时。异步调用可以减少客户端等待时间。
回调函数服务提供者处理完成后,通过回调函数返回结果。用于处理异步调用的结果。客户端需要提供回调接口的实现。
事件驱动异步调用通常基于事件驱动模型。用于实现解耦和提高性能。事件驱动模型允许系统组件独立运行。
结果缓存异步调用的结果可以缓存,以便后续使用。用于减少重复调用,提高性能。可以配置缓存的大小和过期时间。
超时控制可以为异步调用设置超时时间。用于避免长时间等待异步结果。超时后,回调函数将不会执行。
并发控制可以控制异步调用的并发数。用于防止系统过载。可以根据系统资源合理设置并发数。
错误处理可以为异步调用设置错误处理逻辑。用于处理异步调用过程中的异常情况。错误处理逻辑将在回调函数中实现。
异步场景异步调用适用于对性能要求高、对实时性要求不高的业务场景。例如,发送邮件通知、日志记录等。这些操作不需要立即完成,可以异步处理。
配置异步可以通过配置开启或关闭异步调用。用于根据业务需求灵活调整。在服务提供者和消费者配置中都可以设置异步调用。
18. 多协议支持
协议名称描述特点示例/备注
dubboDubbo的默认协议,基于TCP的长连接和NIO。高效的二进制序列化,适用于大规模分布式系统。默认端口为20880。
rmiJava远程方法调用协议。基于Java原生的分布式对象,适用于Java应用间的调用。默认端口为1099。
hessian一种二进制Web服务协议。跨语言支持,轻量级,适用于简单的远程服务调用。需要配置相应的端口。
http基于HTTP的协议,支持RESTful接口。跨语言,易于使用,适合与浏览器或移动设备进行交互。端口可以自定义。
webserviceSOAP协议的实现,适用于企业级应用。规范严格,适合企业级应用,与B2B交互。需要配置相应的端口。
thriftFacebook开发的跨语言服务接口定义和通信框架。高效的二进制协议,适合数据量大的服务调用。需要配置相应的端口。
memcached一种高性能的分布式内存缓存系统。主要用于缓存调用,提高性能。通常与Dubbo协议结合使用。
redis一个开源的内存数据库,用作数据库、缓存和消息代理。支持多种数据结构,可以作为Dubbo的缓存层。通常与Dubbo协议结合使用。
zookeeper一个分布式协调服务,用于维护配置信息、命名、提供分布式同步等。常用作Dubbo的注册中心和分布式锁。默认端口为2181。
自定义协议允许开发者根据需要实现自定义的通信协议。灵活性高,可以针对特定场景进行优化。需要实现Dubbo的协议接口
19. 安全性
安全特性描述应用场景示例/备注
认证机制服务消费方在调用服务前需要通过认证。用于确保只有合法用户可以调用服务。可以集成安全框架如OAuth、JWT等。
权限控制控制用户对服务的访问权限。用于实现细粒度的访问控制。可以基于角色的访问控制(RBAC)。
加密通信使用SSL/TLS等协议对服务调用过程进行加密。用于保护数据传输过程中的安全性。需要配置相应的证书和密钥。
令牌认证服务消费方在调用服务时附带令牌进行认证。用于简化认证过程。令牌通常由服务提供方颁发。
访问控制列表根据IP地址或其他属性限制服务访问。用于防止未授权的访问。可以配置允许访问的IP列表。
敏感信息加密对传输过程中的敏感信息进行加密处理。用于保护用户数据等敏感信息。可以集成数据加密库。
审计日志记录服务调用的详细日志,包括调用方、调用时间、调用结果等。用于问题排查和安全审计。需要合理配置日志级别,避免记录过多的敏感信息。
分布式防御防止分布式环境下的攻击,如DDoS攻击。用于提高系统的安全性。可以集成防火墙和入侵检测系统。
安全配置允许开发者通过配置来启用或禁用特定的安全特性。用于根据业务需求灵活调整安全策略。可以在Dubbo的配置文件中设置。
 20. 扩展性
扩展点描述应用场景示例/备注
Filter拦截服务调用,可以在调用前后执行自定义逻辑。用于实现日志记录、监控、安全控制等功能。实现Filter接口并注册即可。
Interceptor与Filter类似,但功能更丰富,可以访问更多的上下文信息。用于实现更复杂的拦截逻辑,如事务管理。实现Interceptor接口并注册即可。
Serializer序列化器,用于实现自定义的数据序列化和反序列化。用于支持自定义的数据格式。实现Serializer接口并注册即可。
Protocol协议扩展,用于实现自定义的通信协议。用于支持除Dubbo默认协议之外的其他协议。实现Protocol接口并注册即可。
Cluster集群扩展,用于实现自定义的集群策略。用于支持除Dubbo默认集群策略之外的其他策略。实现Cluster接口并注册即可。
LoadBalance负载均衡扩展,用于实现自定义的负载均衡策略。用于支持除Dubbo默认负载均衡策略之外的其他策略。实现LoadBalance接口并注册即可。
Registry注册中心扩展,用于实现自定义的服务注册与发现机制。用于支持除Dubbo默认注册中心之外的其他注册中心。实现Registry接口并注册即可。
Monitor监控扩展,用于实现自定义的监控数据采集和上报。用于支持除Dubbo默认监控系统之外的其他监控系统。实现Monitor接口并注册即可。
ProxyFactory代理工厂扩展,用于实现自定义的服务代理。用于支持除Dubbo默认代理方式之外的其他代理方式。实现ProxyFactory接口并注册即可。
Configurator配置器扩展,用于实现自定义的配置加载和解析。用于支持除Dubbo默认配置方式之外的其他配置方式。实现Configurator接口并注册即可。

 使用实践,可以参考一下我之前的一篇demo介绍:Apache Dubbo的使用_org.apache.dubbo-CSDN博客

或者参考官网最新的Demo案例:https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/quick-start/spring-boot/

相关文章:

Apache Dubbo知识点表格总结

Dubbo是一个高性能的Java RPC框架,它提供了一系列的功能来支持分布式系统的开发。通常用于微服务之间的服务调用,顺便提一下也是用于微服务之间调用的OpenFeign,OpenFeign是Spring Cloud体系中的一个声明式HTTP客户端,用于简化HTT…...

电路板/硬件---器件

电阻 电阻作用 电阻在电路中扮演着重要的角色,其作用包括: 限制电流:电阻通过阻碍电子流动的自由而限制电流。这是电阻最基本的功能之一。根据欧姆定律,电流与电阻成正比,电阻越大,通过电阻的电流就越小。…...

STC15W1K16S和VC6.0串口通讯收发测试实例

/********************************************* STC USB 串口板 2014 4 7 20:12 发送接收数据 使用STC串口调试助手通讯正常,L161 **********************************************/ #include "reg51.h" #include "intrins.h" #define…...

Python程序设计 函数(三)

练习十一 函数 第1关: 一元二次方程的根 定义一个函数qg,输入一元二次方程的系数a,b,c 当判别式大于0,返回1和两个根 当判别式等于0,返回0和两个根 当判别式小于0,访问-1和两个根 在主程序中,根据函数返回…...

linux之ssh

SSH远程连接协议 SSH远程管理 定义 SSH(Secure Shell )是一种安全通道协议,主要用来实现字符界面的远程的登录、远程复制等功能。 SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。因此SSH协议具…...

excel如何将多列数据转换为一列?

这个数据整理借用数据透视表也可以做到: 1.先将数据源的表头补齐,“姓名” 2.点击插入选项卡,数据透视表,在弹出对话框中,数据透视位置选择 现有工作表,(实际使用时新建也没有问题)…...

【Java 刷题记录】前缀和

前缀和 25. 一维前缀和 示例1: 输入: 3 2 1 2 4 1 2 2 3输出: 3 6import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(S…...

NVIDIA: RULER新测量方法让大模型现形

1 引言 最近在人工智能系统工程和语言模型设计方面的进展已经实现了语言模型上下文长度的高效扩展。以前的工作通常采用合成任务,如密钥检索和大海捞针来评估长上下文语言模型(LMs)。然而,这些评估在不同工作中使用不一致,仅揭示了检索能力,无法衡量其他形式的长上下文理解。 …...

2024数学-微积分和线性代数/本科研究生专业考试/考研/论文/重点公式考点汇总/最难公式投票

## 整体公式汇总列表 http://www.deepnlp.org/equation/category/math #### 微积分 ## 几何级数http://www.deepnlp.org/equation/arithmetic-and-geometric-progressions ## 级数收敛http://www.deepnlp.org/equation/convergence-of-series ## 二项式展开 http://www.dee…...

代码随想录训练营Day33(贪心算法):Leetcode1005、134、135(难得有一天能完全独立做出题目)

Leetcode1005: 题目描述: 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数…...

Flutter笔记:Widgets Easier组件库(12)使用消息吐丝(Notify Toasts)

Flutter笔记 Widgets Easier组件库(12)使用消息吐丝(Notify Toasts) - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 29114848416…...

从《春色寄情人》学习如何面对死亡

经典台词,很震撼又很实用,记录一下。 ❤️01 有的时候好人不长命百岁,是因为老天爷觉得他们太累,让他们提前休息了! ❤️02 跟我们亲近的人离世,有可能是老天给我们发的信号,提醒我们&#xff…...

使用moveit控制机械臂

在这篇博客中,我们将详细探讨如何利用Python和Robot Operating System(ROS)配合MoveIt! 控制机械臂执行精确的抓取任务。机械臂技术在工业自动化、医疗服务以及研究领域扮演着越来越关键的角色。本文将通过介绍安装必要的软件、编写控制脚本以…...

Mysql报错红温集锦(一)(ipynb配置、pymysql登录、密码带@、to_sql如何加速、触发器SIGNAL阻止插入数据)

一、jupyter notebook无法使用%sql来添加sql代码 可能原因: 1、没装jupyter和notebook库、没装ipython-sql库 pip install jupyter notebook ipython-sql 另外如果是vscode的话还需要安装一些相关的插件 2、没load_ext %load_ext sql 3、没正确的登录到mysql…...

ASP.NET Core SignalR 配置与集成测试究极指南

这篇文章也可以在我的博客中查看 前言 哥们最近都在埋头苦干,沉默是金,有一段时间没更新博客了。然而今儿SignalR集成测试实属是给我整破防了。虽说SignalR是.NET官方维护的实时通信库,已经开发了有十几年,甚至已经编入至了core…...

JENKINS 安装,学习运维从这里开始

Download and deployJenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their softwarehttps://www.jenkins.io/download/首先点击上面。下载Jenkins 为了学习,从windows开始&#x…...

大语言模型从Scaling Laws到MoE

1、摩尔定律和伸缩法则 摩尔定律(Moores law)是由英特尔(Intel)创始人之一戈登摩尔提出的。其内容为:集成电路上可容纳的晶体管数目,约每隔两年便会增加一倍;而经常被引用的“18个月”&#xf…...

四级英语翻译随堂笔记

降维表达:中译英,英译英 没有强调主语,没有说明主语:用被动 但如果实在不行,再增添主语 不会就不翻译,不要乱翻译 以xxx为背景:against the backdrop of the xxx eg:against the backdrop of…...

Nacos支持的配置格式及其在微服务架构中的应用

今天,我想和大家探讨一下Nacos这一重要的微服务组件,特别是它所支持的配置格式以及这些格式在微服务架构中的应用。 一、Nacos简介 Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了服务发现、配置管理…...

2024年华为OD机试真题-小明找位置-(C++)-OD统一考试(C卷D卷)

题目描述: 小朋友出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。 算法复杂度要求不高于nLog(n);学号为整数类型,队列规模<=10000; 输入描述: 1、第一行:输入已排成队列的小朋友的学号(正整数),以”,”隔开; …...

机器人系统ros2内部接口介绍

内部 ROS 接口是公共 C API &#xff0c;供创建客户端库或添加新的底层中间件的开发人员使用&#xff0c;但不适合典型 ROS 用户使用。 ROS客户端库提供大多数 ROS 用户熟悉的面向用户的API&#xff0c;并且可能采用多种编程语言。 内部API架构概述 内部接口主要有两个&#x…...

跟随Facebook的足迹:社交媒体背后的探索之旅

在当今数字化时代&#xff0c;社交媒体已经成为了人们日常生活中不可或缺的一部分。而在这庞大的社交媒体网络中&#xff0c;Facebook作为其中的巨头&#xff0c;一直在引领着潮流。从创立之初的一个大学社交网络到如今的全球性平台&#xff0c;Facebook的发展历程承载了无数故…...

面试题分享之Java并发篇

注意&#xff1a;文章若有错误的地方&#xff0c;欢迎评论区里面指正 &#x1f36d; 系列文章目录 面试题分享之Java集合篇&#xff08;三&#xff09; 面试题分享之Java集合篇&#xff08;二&#xff09; 面试题分享之Java基础篇&#xff08;三&#xff09; 前言 今天给小…...

bpmn-js 多实例配置MultiInstanceLoopCharacteristics实现或签会签

使用bpmn-js流程图开发过程中会遇到会签和或签的问题,这个时候我们就需要使用多实例配置来实现BPMN 2.0的配置实现了,多实例任务,是从流程编辑概念之初也就是Activiti时期就存在的一个方式。所谓的多实例任务也就是字面意思,一个任务由多个人完成,常见于我们的审批流程的或…...

【gpedit.msc】组策略编辑器的安装,针对windows家庭版,没有此功能

创建一个记事本文件然后放入以下内容 echo offpushd "%~dp0"dir /b %systemroot%\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >gp.txtdir /b %systemroot%\servicing\Packages\Microsoft-Windows-GroupPolicy-…...

带EXCEL附件邮件发送相关代码

1.查看生成的邮件 2.1 非面向对象的方式&#xff08;demo直接copy即可&#xff09; ​ REPORT Z12. DATA: IT_DOCUMENT_DATA TYPE SODOCCHGI1,IT_CONTENT_TEXT TYPE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE,IT_PACKING_LIST TYPE TABLE OF SOPCKLSTI1 WITH HEADER LIN…...

【算法作业】均分卡牌,购买股票

问题描述 John 有两个孩子&#xff0c;在 John病逝后&#xff0c;留下了一组价值不一定相同的魔卡&#xff0c; 现在要求你设计一种策略&#xff0c;帮John的经管人将John的这些遗产分给他的两个孩子&#xff0c;使得他们获得的遗产差异最小&#xff08;每张魔卡不能分拆&#…...

python作业

题目 分析 步骤&#xff1a; 判断先画空格还是数字 当有n层时&#xff0c;第i层有多少个空格第i层的起始数字是几&#xff0c;结尾是几&#xff0c;即数字取值范围当有n层时&#xff0c;第i层有多少个数字 代码 模式A n int(input("请输入行数:")) for i in range(…...

【Linux的文件篇章 - 管道文件】

Linux学习笔记---013 Linux的管道文件1、进程间通信1.1、进程为什么要通信&#xff1f;1.2、进程如何通信&#xff1f;1.3、进程通信的方式&#xff1f; 2、匿名管道2.1、理解一种现象2.2、基本概念和管道原理 3、管道的使用3.1、代码样例3.2、如何使用管道通信呢&#xff1f;3…...

C# 局部静态函数,封闭方法中的最佳选择

C# 局部静态函数&#xff0c;封闭方法中的最佳选择 简介特性 应用场景辅助计算递归与尾递归优化筛选与过滤操作查找与映射操作 生命周期静态局部函数 vs 普通局部函数性能封装性可读性 简介 C# 局部静态函数&#xff08;Local Static Functions&#xff09;是一种函数作用域内…...

【MySQL】MySQL 8.4.0 长期支持版(LTS)安装

就在2024年 “5.1” 节前&#xff0c;MySQL官方发布了8.4.0长期支持版&#xff08;LTS - Long Term Support&#xff09;。根据官方提供的文档&#xff0c;在本地虚拟机进行安装测试。 安装、配置和启动过程记录如下&#xff1a; 第一步&#xff0c;上传到安装包&#xff08;my…...

nest中的ORM

在 Nest.js 中执行 SQL 查询通常涉及使用 TypeORM 或 Sequelize 这样的 ORM&#xff08;对象-关系映射&#xff09;库。这些库使得在 Nest.js 应用程序中连接和操作 SQL 数据库变得更加简单和直观。 以下是一个使用 TypeORM 在 Nest.js 中执行 SQL 查询的示例代码&#xff1a;…...

TCP(Transmission Control Protocol,传输控制协议)如何保证数据的完整性?

TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;通过一系列机制来保证数据传输的可靠性和无错性&#xff0c;这些机制主要包括&#xff1a; 校验和&#xff1a;TCP报文段包含一个校验和字段&#xff0c;用于检测数据在传输过程中是否出错。…...

Numpy库介绍

NumPy&#xff08;Numerical Python的缩写&#xff09;是Python中用于科学计算的一个强大的库。它提供了高性能的多维数组对象&#xff08;即ndarray&#xff09;、用于处理这些数组的工具以及用于数学函数操作的函数。让我为你介绍一下它的一些主要功能&#xff1a; 1. 多维数…...

临时有事无法及时签字盖章?试试用契约锁设置“代理人”

遇到“领导休假中、在开重要会议、外出考察或者主任医生手术中等”一段时间内不方便或者无法及时签字盖章的情况怎么办&#xff1f;业务推进不了只能干等&#xff1f; 契约锁电子签及印控平台支持印章、签名“临时授权”、“代理签署”&#xff0c;实现指定人、指定时间段、指定…...

数据库权限管理

1.查看系统级权限&#xff08;global level) Select * from mysql.user\G; 2.查看数据库中所有表的权限 Select * from mysql.db\G 3.远程连接数据库 第一步在有数据库服务上的主机上&#xff1a;授权 grant all on *.* to root192.168.40.83 identified by Zxy20234; 第…...

如何创建一个 Django 应用并连接到数据库

简介 Django 是一个用 Python 编写的免费开源的 Web 框架。这个工具支持可扩展性、可重用性和快速开发。 在本教程中&#xff0c;您将学习如何为一个博客网站建立与 MySQL 数据库的初始基础。这将涉及使用 django-admin 创建博客 Web 应用程序的骨架结构&#xff0c;创建 MyS…...

【算法刷题day44】Leetcode:518. 零钱兑换 II、377. 组合总和 Ⅳ

文章目录 Leetcode 518. 零钱兑换 II解题思路代码总结 Leetcode 377. 组合总和 Ⅳ解题思路代码总结 草稿图网站 java的Deque Leetcode 518. 零钱兑换 II 题目&#xff1a;518. 零钱兑换 II 解析&#xff1a;代码随想录解析 解题思路 先遍历物品&#xff0c;再遍历背包。 代码…...

『51单片机』AT24C02[IIC总线]

存储器的介绍 ⒈ROM的功能⇢ROM的数据在程序运行的时候是不容改变的&#xff0c;除非你再次烧写程序&#xff0c;他就会改变&#xff0c;就像我们的书本&#xff0c;印上去就改不了了&#xff0c;除非再次印刷&#xff0c;这个就是ROM的原理。 注→在后面发展的ROM是可以可写可…...

Jenkins与Rancher的配合使用

Jenkins和Rancher是两个常用的DevOps工具&#xff0c;可以很好地配合使用来实现持续集成和持续部署。 Jenkins是一个开源的自动化构建工具&#xff0c;可以实现自动化的代码构建、测试和部署等一系列操作。可以通过Jenkins来触发构建任务&#xff0c;例如从代码仓库中拉取最新的…...

GIS入门,常用的多边形平滑曲线算法介绍和JavaScript的多边形平滑曲线算法库chaikin-smooth的实现原理和使用

前言 本章介绍一下常用的多边形平滑曲线算法及其使用案例。 多边形平滑算法通常用于图形处理或计算机图形学中,以使线条或曲线在连接处平滑过渡,而不出现明显的棱角或断裂。多边形平滑算法有多种实现方法,其中一些常见的有下面几种: 贝塞尔曲线插值(Bezier Curve Interpo…...

气膜体育馆内部的采光效果如何?—轻空间

气膜体育馆内部的采光效果如何&#xff1f;这是许多人对这种创新建筑的一个关键关注点。 首先&#xff0c;气膜体育馆的采光性非常好。阳光透过屋顶时以漫射光的方式进入室内&#xff0c;这种透射方式使得室内的光线柔和而均匀。从内部观察&#xff0c;整个屋顶就像一个连续的明…...

矩阵的对称正定性判决(复习)

文章目录 本科学的数学知识忘的太快了 如何判断一个实矩阵是否是对称正定 在线性代数中&#xff0c;一个实对称矩阵是否为正定可以通过以下方法判断&#xff1a; 对称性&#xff1a; 首先&#xff0c;确认矩阵是否对称&#xff0c;即矩阵的转置是否等于其本身。 特征值检查&…...

网络安全之DHCP详解

DHCP&#xff1a;Dynamic Host Configration Protocol 动态主机配置协议 某一协议的数据是基于UDP封装的&#xff0c;当它想确保自己的可靠性时&#xff0c;这个协议要么选确认重传机制&#xff0c;要么选周期性传输。 DHCP是确认重传&#xff0c;【UDP|DHCP】,当DHCP分配完地…...

【Proteus】LED呼吸灯 直流电机调速

1.LED呼吸灯 #include <REGX51.H> sbit LEDP2^0; void delay(unsigned int t) {while(t--); } void main() {unsigned char time,i;while(1){for(time0;time<100;time){for(i0;i<20;i){LED0;delay(time);LED1;delay(100-time);}}for(time100;time>0;time--){fo…...

今天遇到一个GPT解决不了的问题

问题描述 你好&#xff0c;postman的一个post请求&#xff0c;编辑器里面放了一个很长的json数据&#xff0c;报Tokenization is skipped for long lines for performance reasons. This can be configured via editor.maxTokenizationLineLength.&#xff0c;但是同样的数据&a…...

优化SQL的方法

来自组内分享&#xff0c;包含了比较常使用到的八点&#xff1a; 避免使用select * union all代替union 小表驱动大表 批量操作 善用limit 高效的分页 用连接查询代替子查询 控制索引数量 一、避免使用select * 消耗数据库资源 消耗更多的数据库服务器内存、CPU等资源。 消…...

库存管理系统开源啦

软件介绍 ModernWMS是一个针对小型物流仓储供应链流程的开源库存管理系统。该系统的开发初衷是为了满足中小型企业在有限IT预算下对仓储管理的需求。通过总结多年ERP系统研发经验&#xff0c;项目团队开发了这套适用于中小型企业的系统&#xff0c;以帮助那些有特定需求的用户。…...

【java】接口

什么是接口 接口当中存在的是对方法的定义&#xff0c;而不是对方法的具体实现。 为什么不实现这个方法呢&#xff1f; 继承的本质是代码的复用。当一个父类会经常被继承&#xff0c;并且子类都要自己实现方法时&#xff0c;父类中的方法就会显得累赘&#xff0c;并且占用了…...

Java中的类型转换

一、类型转换 对类型转换来说分为向上类型转换和向下类型转换&#xff1a; 向上类型转换是自动完成的&#xff0c;一般是小类型向大类型转换。在引用类型中是子类型向父类型转换。向下类型转换是强制完成的&#xff0c;一般是大类型向小类型转换。在引用类型中是父类型向子类…...

【Kubenetes】边缘计算KubeEdge架构设计详解

文章目录 前言KubeEdge云边通信方式云端架构设计EdgeController:云到边&#xff1a;边到云 DeviceController:云到边边到云 边缘端架构设计EdgedPod的管理部分Pod的监控部分Pod的卷管理Pod的垃圾回收Pod同步管理 MetaMangger从云到边缘的更新 (Update From Cloud To Edge)从边缘…...

tailwindcss - 不喜欢css人的福音

Tailwind CSS&#xff1a;实用主义的前端革新 在现代网页设计领域&#xff0c;Tailwind CSS以其独特的实用性风格迅速崛起&#xff0c;成为了前端开发者的新宠。这个高度可定制的工具集不仅提高了开发效率&#xff0c;还赋予了开发者无限的创造力。本文将带您深入了解Tailwind…...

什么是元宇宙?

元宇宙&#xff08;Metaverse&#xff09;是一个由虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;、区块链、人工智能&#xff08;AI&#xff09;等多种先进技术融合构建的数字化虚拟世界。这个世界不仅限于一个简单的虚拟环境&#xff0c;而是一个能…...

笔记本电脑忘记开机密码怎么办?不需重装系统,重置开机密码

笔记本电脑忘记开机密码&#xff0c;重置开机密码方法 这里记录个方法&#xff0c;亲测有效。我的电脑版本是Windows11&#xff0c;21H2。 步骤1&#xff1a;打开疑难解答界面 方式1&#xff1a;按住Shift键&#xff0c;然后重启电脑。我电脑使用这个方法无效。 方式2&#…...

train_gpt2_fp32.cu - main

llm.c/test_gpt2_fp32.cu at master karpathy/llm.c (github.com) 源码 // ---------------------------------------------------------------------------- // main training loop int main(int argc, char *argv[]) {// read in the (optional) command line argumentsco…...

Unity 2021 升级至团结引擎

UnityWebRequest 报错 InvalidOperationException: Insecure connection not allowed 解决方法 不兼容jdk 8 需要安装 JDK11 64bit 必须JDK 11&#xff0c;高版本也不行 安卓环境hub 未给我安装完全。 Data\PlaybackEngines\AndroidPlayer 并没有NDK,SDK。但是 HUB 显示已经…...