新手如何做网站,网站建设_广州网站建设专业公司,高要住房和城乡建设局网站,知识付费网站开发教程目录
一、什么是Dubbo?
二、SpringBoot整合Dubbo
1、父工程引入依赖
2、各个Dubbo服务子模块引入依赖
3、服务提供者
#xff08;1#xff09;启动类添加注解EnableDubbo
#xff08;2#xff09;服务类添加注解DubboService
#xff08;3#xff09;配置文件…
目录
一、什么是Dubbo?
二、SpringBoot整合Dubbo
1、父工程引入依赖
2、各个Dubbo服务子模块引入依赖
3、服务提供者
1启动类添加注解EnableDubbo
2服务类添加注解DubboService
3配置文件配置dubbo的信息
4、服务的消费者
1启动类添加注解EnableDubbo
2接口层通过注解DubboReference将远程服务注入
3配置文件配置dubbo的信息 Spring Boot是一款用于简化Java应用程序开发的框架它提供了快速构建、易于配置和扩展的特性。Dubbo是一个高性能、轻量级的开源RPC框架它支持多种传输协议和序列化方式并可以实现服务之间的远程调用。本文将介绍如何使用Spring Boot整合Dubbo快速搭建一个简单的分布式应用。
一、什么是Dubbo? Apache Dubbo是一款RPC服务开发框架用于解决微服务架构下的服务治理与通信问题官方提供了 Java、Golang等多语言SDK实现。使用Dubbo开发的微服务原生具备相互之间的远程地址发现与通信能力 利用Dubbo提供的丰富服务治理特性可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo被设计为高度可扩展用户可以方便的实现流量拦截、选址的各种定制逻辑。 在云原生时代Dubbo 相继衍生出了 Dubbo3、Proxyless Mesh 等架构与解决方案在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。 二、SpringBoot整合Dubbo
1、父工程引入依赖 !-- Dubbo -- dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-bom/artifactId version${dubbo.version}/version typepom/type scopeimport/scope /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-dependencies-zookeeper-curator5/artifactId version${dubbo.version}/version typepom/type /dependency 2、各个Dubbo服务子模块引入依赖 !-- dubbo -- dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-spring-boot-starter/artifactId version3.0.9/version /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-dependencies-zookeeper-curator5/artifactId typepom/type exclusions exclusion artifactIdslf4j-reload4j/artifactId groupIdorg.slf4j/groupId /exclusion /exclusions version3.0.9/version /dependency 3、服务提供者
1启动类添加注解EnableDubbo EnableDubbo是Dubbo框架中的一个重要注解主要用于激活Dubbo的自动配置和启动类上开启Dubbo的支持。
SpringBootApplication
EnableDubbo
public class ProviderApp {public static void main(String[] args) {SpringApplication.run(ProviderApp.class, args);System.out.println(Hello World!);}
}
2服务类添加注解DubboService DubboService是Dubbo框架中用于服务提供方的一个重要注解。它的主要作用是将服务接口的实现类注册到注册中心使其能够被服务消费方发现和调用。DubboService支持设置当前服务的版本号、重试次数、超时时间、负载均衡策略等信息。如下就是设置了该服务的版本为1.0.0负载均衡策略为轮询重试次数为3服务调用的超时时间为3000毫秒。Dubbo的负载均衡除了内置了轮询策略之外还内置了如下一些常用的负载均衡策略
加权随机(random) 默认算法默认权重相同。所以在权重相同的情况下会在在服务提供者中随机选择一个来处理请求。该策略的优点是实现简单能够较好地平均分配请求。缺点是在服务提供者数量较多时可能无法保证每个提供者分配到的请求量完全均匀。
最少活跃优先 加权随机(leastactive) 活跃数是指每个服务提供者都有一个“活跃数”表示当前正在处理的请求数量。当一个请求到达时活跃数加一请求处理完毕时活跃数减一。最少活跃优先便是指在分配新请求时优先选择活跃数最小的服务提供者。这样性能较好的服务提供者处理速度快活跃数下降快可以处理更多请求而性能较差的提供者则自然接收较少请求。而当在选出活跃数最少的提供者后如果存在多个活跃数相同的提供者则根据它们的权重进行随机选择。权重越大被选中的概率就越高。该策略的核心思想其实就是能者多劳的思想。该策略的优点是能够有效避免将请求发送到负载较高或响应较慢的服务提供者上。缺点是需要实时监控每个提供者的活跃请求数增加了一定的系统开销。
最短响应优先 加权随机(shortestresponse) 该策略从多个服务提供者中选择出响应时间最短的一个或多个来处理请求。当存在多个响应时间相同的服务提供者时根据它们的权重进行加权随机选择。该策略的优点是能够灵活地应对服务提供者的性能变化并优化请求处理速度。缺点是实现较为复杂需要实时监控服务提供者的响应时间和计算权重。
一致性哈希(consistenthash) 根据某个一致性哈希算法确定请求应该发送到哪个服务提供者。该策略的优点是能够在服务提供者动态变更时最大限度地减少对已分配请求的影响。缺点是算法较为复杂实现和维护成本较高。 DubboService(version 1.0.0, loadbalance roundrobin, retries 3, timeout 3000)
public class TestDubboServiceImpl implements TestDubboService {Overridepublic String sayHello(String name) {return hello, name;}Overridepublic ZhuoYe getZuoYe() {ZhuoYe zuoYe new ZhuoYe();zuoYe.setName(zhuoye-1).setDescription(帅呆了);return zuoYe;}
}
3配置文件配置dubbo的信息 dubbo: application: name: dubbo-springboot-demo-provider #当前应用名称 protocol: name: dubbo #协议名称 port: -1 #配置为-1则会分配一个没有被占用的端口 registry: address: zookeeper://192.168.190.129:2181 #注册中心地址这里选择zookeeper作为注册中心也是官方推荐的 timeout: 10000 #连接到注册中心的超时时间10S时间太多可能很容易注册失败默认5s 更多的配置可以参考官方文档 。
4、服务的消费者
1启动类添加注解EnableDubbo
SpringBootApplication
EnableDubbo
public class ProviderApp {public static void main(String[] args) {SpringApplication.run(ProviderApp.class, args);System.out.println(Hello World!);}
}
2接口层通过注解DubboReference将远程服务注入 DubboReference 是 Dubbo 提供的一个用于引用远程服务的注解它通常用在服务消费者的实现类中用于标记一个远程服务的引用。这个注解会将指定的远程服务连接到本地的某个接口上使得你可以像调用本地接口一样调用远程服务。DubboReferencee也支持设置当前服务的版本号、重试次数、超时时间、负载均衡策略等信息。而且DubboReference注解中设置的属性会覆盖 DubboService注解中的相应属性。也就是说当我们在DubboReference和DubboService中都设置了相同的属性那么DubboReference中的属性值将优先生效。通过覆盖属性可以根据不同的场景或需求灵活地调整服务引用的配置。例如在开发环境中可能需要较短的超时时间以快速检测问题而在生产环境中可能需要更长的超时时间以确保稳定性。
RestController
RequestMapping(dubbo)
public class TestDubboController {DubboReference(version 1.0.0,timeout 1000,loadbalanceleastactive,retries 2)private TestDubboService testDubboService;GetMapping(hello)public String hello(String name) {return testDubboService.sayHello(name);}GetMapping(getZhuoye)public ZhuoYe getZhuoye() {return testDubboService.getZuoYe();}
}3配置文件配置dubbo的信息
dubbo:application:name: dubbo-springboot-demo-comsumerprotocol:name: dubboport: -1registry:address: zookeeper://192.168.190.129:2181timeout: 10000