当前位置: 首页 > news >正文 医院做网站的费用多少建设网站需要购买数据库吗 news 2025/11/2 19:45:19 医院做网站的费用多少,建设网站需要购买数据库吗,如何建立微信公众号免费,彩票的网站怎么做的简述 spring-cloud-starter-loadbalancer 是 Spring Cloud 中的一个组件#xff0c;它提供了客户端负载均衡的功能。在 Spring Cloud 的早期版本中#xff0c;Netflix Ribbon 被广泛用作客户端负载均衡器#xff0c;但随着时间推移和 Netflix Ribbon 进入维护模式#xff…简述 spring-cloud-starter-loadbalancer 是 Spring Cloud 中的一个组件它提供了客户端负载均衡的功能。在 Spring Cloud 的早期版本中Netflix Ribbon 被广泛用作客户端负载均衡器但随着时间推移和 Netflix Ribbon 进入维护模式Spring Cloud 社区开始转向更灵活、更易于维护的替代方案。 spring-cloud-starter-loadbalancer 是基于 Spring 5 的 WebClient 构建的并使用了 ReactorSpring 5 的反应式编程模型的核心库来实现异步非阻塞的负载均衡请求。它与 Spring Cloud 的服务发现和配置结合得非常好可以很容易地与 Eureka、Consul、Nacos 等服务发现组件一起使用。 当将 spring-cloud-starter-loadbalancer 添加到Spring Boot 应用程序中时可以使用 WebClient.Builder 的 loadBalancer 方法来创建一个具有负载均衡功能的 WebClient 实例。这个 WebClient 实例会自动从服务发现中获取服务实例列表并使用内置的负载均衡算法如轮询、随机等来选择一个服务实例来发送请求。 例如如果正在使用 Eureka 作为服务发现并且想要发送一个 GET 请求到名为 “my-service” 的服务可以这样做 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; Service public class MyServiceClient { Autowired private WebClient.Builder webClientBuilder; Bean LoadBalanced public WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } public String getSomethingFromMyService() { // 注意这里我们直接使用了 my-service 作为 URI而不是具体的服务实例地址 return webClientBuilder.build() .get() .uri(http://my-service/some-endpoint) .retrieve() .bodyToMono(String.class) .block(); // 注意block() 方法会阻塞当前线程通常只在非反应式上下文中使用 } }主要特点 基于 WebClient与 Spring 5 的 WebClient 紧密集成提供了反应式Reactive的 HTTP 客户端功能。服务发现集成与 Spring Cloud 的服务发现组件如 Eureka、Consul、Nacos 等集成可以自动获取服务实例列表。内置负载均衡算法提供了内置的负载均衡算法如轮询Round Robin、随机Random等。反应式编程支持反应式编程模型允许非阻塞的 I/O 操作和异步处理。灵活性与 Ribbon 相比提供了更多的灵活性和扩展性可以更容易地定制负载均衡行为。与 Spring Cloud Gateway 集成与 Spring Cloud Gateway 紧密集成为其提供了负载均衡功能。 使用 添加依赖在 Maven 或 Gradle 项目中添加 spring-cloud-starter-loadbalancer 依赖。 !-- SpringCloud Loadbalancer --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency配置 WebClient使用 LoadBalanced 注解来标记一个 WebClient.Builder Bean以便将其配置为支持负载均衡。发送请求通过 WebClient 发送请求时使用服务名称而不是具体的服务实例地址作为 URI 的主机部分。自定义负载均衡算法如果需要可以自定义负载均衡算法并通过配置或编程方式将其应用到 WebClient 上。 注意事项 阻塞调用虽然 WebClient 是反应式的但在某些情况下如与同步代码交互时可能需要使用 block() 方法来阻塞当前线程并等待响应。但应尽量避免在反应式上下文中使用 block()。配置负载均衡器的行为可以通过配置进行定制包括选择负载均衡算法、设置超时时间等。服务发现确保应用程序已经正确配置了服务发现组件如 Eureka、Consul 等以便 spring-cloud-starter-loadbalancer 能够获取服务实例列表。版本兼容性注意 spring-cloud-starter-loadbalancer 与其他 Spring Cloud 组件的版本兼容性确保它们能够协同工作。 负载均衡算法 1. 轮询负载均衡策略Round Robin 描述这是默认的负载均衡策略它会按照顺序依次将请求发送到服务实例列表中的每个服务实例。特点 简单易实现。每个服务实例接收到的请求数量大致相等在理想情况下。不考虑服务实例的当前负载状态或性能。 2. 随机负载均衡策略Random 描述该策略会随机选择一个服务实例来发送请求。特点 在多次请求中每个服务实例都有可能被选中。与轮询策略相比它增加了随机性但每个服务实例接收到的请求数量可能不均等。同样不考虑服务实例的当前负载状态或性能。 3. 自定义负载均衡策略 描述除了内置的负载均衡策略外spring-cloud-starter-loadbalancer 还支持自定义负载均衡策略。特点 开发者可以根据实际需求实现自己的负载均衡算法。可以考虑服务实例的当前负载状态、性能、地理位置等多种因素来做出决策。提供了更高的灵活性和定制性。 4. Nacos 权重负载均衡器 描述当与 Nacos 服务发现组件一起使用时可以使用 Nacos 提供的权重负载均衡器。特点 服务实例可以配置权重值权重值越高的实例接收到的请求越多。权重值可以根据服务实例的性能、资源使用情况等因素进行动态调整。提供了更细粒度的控制可以根据实际需求进行灵活配置。 5. 自定义算法 通过实现自定义的 ReactorLoadBalancer 来定义自己的负载均衡算法。 定义自定义的负载均衡器需要实现 ReactorLoadBalancer 接口或扩展现有的实现如 RoundRobinLoadBalancer。实现 choose 方法这是负载均衡算法的核心它接收一个请求通常是一个 Request 对象和一个服务实例列表ServiceInstanceListSupplier并返回一个 Mono表示选定的服务实例。配置自定义的负载均衡器需要将自定义的负载均衡器配置为 Spring Cloud 的默认负载均衡器。这通常是通过注册一个 ReactorLoadBalancer 的 Bean 来完成的。 示例 import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.DefaultRequest; import org.springframework.cloud.client.loadbalancer.ReactiveLoadBalancer; import org.springframework.cloud.client.loadbalancer.ReactiveLoadBalancerFactory; import org.springframework.cloud.client.ServiceInstanceChooser; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import reactor.core.publisher.Mono; import java.util.List; Configuration public class CustomLoadBalancerConfig { Bean public ReactiveLoadBalancerServiceInstance customLoadBalancer( ReactiveLoadBalancerFactoryServiceInstance factory, ObjectProviderListServiceInstance serviceInstances) { return new ReactiveLoadBalancerServiceInstance() { Override public MonoResponseServiceInstance choose(Request request) { // 这里是自定义的负载均衡算法实现 // 例如我们可以简单地返回服务实例列表中的第一个实例 return Mono.justOrEmpty(serviceInstances.getIfAvailable()) .flatMapMany(List::stream) .firstElement() // 或者可以实现自己的选择逻辑 .map(Response::just); } // 其他必要的方法如 recordStats, filter, etc.可以根据需要进行实现 }; } // 如果想要为特定的服务配置自定义的负载均衡器 // 可以通过 ServiceId 来区分并返回不同的 ReactiveLoadBalancer 实例 // 例如public ReactiveLoadBalancerServiceInstance customLoadBalancerForServiceX(...) {...} }spring-cloud-starter-loadbalancer 提供了多种负载均衡算法包括轮询、随机和自定义策略等。这些算法可以根据实际需求进行选择和配置以满足不同的负载均衡需求。同时与 Nacos 服务发现组件的集成还提供了权重负载均衡器的功能进一步增加了负载均衡的灵活性和可定制性。开发者可以根据自己的业务场景和需求选择适合的负载均衡算法并对其进行适当的配置和优化以实现更高效、更可靠的微服务调用。 反应式编程 从 Spring Cloud Greenwich 版本开始Spring Cloud 引入了对 Project Reactor 的支持并将负载均衡器从传统的阻塞式基于 Ribbon转变为反应式基于 spring-cloud-starter-loadbalancer。 反应式编程是一种异步、非阻塞的编程范式它使用数据流streams和变化传播propagation of change来处理数据。在反应式编程中数据不是通过传统的调用和返回机制来传递的而是通过异步数据流在组件之间传递。 在 spring-cloud-starter-loadbalancer 中反应式编程主要体现在以下几个方面 非阻塞调用与传统的基于 Ribbon 的阻塞式负载均衡器不同spring-cloud-starter-loadbalancer 使用反应式编程模型来执行非阻塞的负载均衡请求。这意味着它不会阻塞线程等待响应而是异步地处理请求和响应。响应式类型负载均衡器的 API 使用了反应式类型如 Mono 和 Flux它们是 Project Reactor 提供的反应式类型。Mono 用于表示 0 或 1 个元素的异步序列而 Flux 用于表示 0 到 N 个元素的异步序列。背压Backpressure反应式编程支持背压机制即消费者可以控制生产者生成数据的速度。这在处理大量并发请求时非常有用可以避免因生产者过快生成数据而导致消费者处理不过来。错误处理反应式编程提供了丰富的错误处理机制如 onErrorResume、retry 等操作符可以在发生错误时优雅地处理异常情况。组合和转换Mono 和 Flux 提供了丰富的操作符用于组合和转换异步数据流。这使得可以灵活地处理负载均衡请求和响应满足各种复杂的业务需求。 简单的示例: import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; RestController public class MyController { private final LoadBalancerClient loadBalancerClient; public MyController(LoadBalancerClient loadBalancerClient) { this.loadBalancerClient loadBalancerClient; } GetMapping(/call-service) public MonoString callService() { // 获取服务实例 ServiceInstance serviceInstance loadBalancerClient.choose(my-service).block(); // 使用 WebClient 发起反应式请求 WebClient webClient WebClient.builder() .baseUrl(serviceInstance.getUri().toString()) .build(); return webClient.get() .uri(/some-endpoint) .retrieve() .bodyToMono(String.class); } }注意上面的示例中使用了 block() 方法来同步获取服务实例这在实际应用中可能不是最佳实践。通常应该在整个调用链中保持反应式编程的异步特性。但是为了简化示例这里使用了 block() 方法。在实际应用中应该将服务实例的获取和请求的发起都转换为反应式操作。 与 OpenFeign 集成 Spring Cloud 应用程序中spring-cloud-starter-loadbalancer 通常与 spring-cloud-starter-openfeign 或其他 HTTP 客户端如 WebClient一起使用以支持对服务发现的客户端进行负载均衡的调用。 当使用 OpenFeign 声明式 HTTP 客户端时spring-cloud-starter-loadbalancer 会自动集成以提供负载均衡功能。只需在 pom.xml 或 build.gradle 文件中包含相应的依赖并在 Feign 客户端接口上使用 FeignClient 注解指定服务名。 Maven 依赖 dependencies !-- ... 其他依赖 ... -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-openfeign/artifactId /dependency dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-loadbalancer/artifactId /dependency !-- ... 其他依赖 ... -- /dependenciesFeign 客户端 FeignClient(name my-service) public interface MyServiceClient { // 定义 HTTP 方法 GetMapping(/some-endpoint) MonoString getSomething(); }WebClient 集成 使用 WebClient 作为 HTTP 客户端可以通过 spring-cloud-starter-loadbalancer 来实现服务间的负载均衡调用。需要创建一个 WebClient.Builder bean并使用 LoadBalancerExchangeFilterFunction 来自动处理服务发现和负载均衡。 配置 WebClient Bean Bean public WebClient.Builder webClientBuilder(LoadBalancerClient loadBalancerClient) { return WebClient.builder() .baseUrl(lb://my-service) // 使用 lb:// 前缀启用负载均衡 .filter(new LoadBalancerExchangeFilterFunction(loadBalancerClient)); }使用 WebClient 发起请求 Autowired private WebClient.Builder webClientBuilder; public MonoString callService() { WebClient webClient webClientBuilder.build(); return webClient.get() .uri(/some-endpoint) .retrieve() .bodyToMono(String.class); }注意事项 确保 Spring Cloud 版本支持 spring-cloud-starter-loadbalancer。从使用 Ribbon 迁移到 spring-cloud-starter-loadbalancer请注意两者之间的配置差异和 API 更改。在使用 WebClient 时确保使用了正确的 URL 前缀lb://来启用负载均衡。在自定义负载均衡器时确保实现是线程安全的并且能够处理并发请求。 文章转载自: http://www.morning.dhpjq.cn.gov.cn.dhpjq.cn http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn http://www.morning.twhgn.cn.gov.cn.twhgn.cn http://www.morning.brsgw.cn.gov.cn.brsgw.cn http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn http://www.morning.wncb.cn.gov.cn.wncb.cn http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn http://www.morning.rlnm.cn.gov.cn.rlnm.cn http://www.morning.wchsx.cn.gov.cn.wchsx.cn http://www.morning.bpmtl.cn.gov.cn.bpmtl.cn http://www.morning.xsklp.cn.gov.cn.xsklp.cn http://www.morning.tymwx.cn.gov.cn.tymwx.cn http://www.morning.fjzlh.cn.gov.cn.fjzlh.cn http://www.morning.nlkhr.cn.gov.cn.nlkhr.cn http://www.morning.fwmln.cn.gov.cn.fwmln.cn http://www.morning.yxyyp.cn.gov.cn.yxyyp.cn http://www.morning.crrjg.cn.gov.cn.crrjg.cn http://www.morning.wfzdh.cn.gov.cn.wfzdh.cn http://www.morning.bsghk.cn.gov.cn.bsghk.cn http://www.morning.bnbtp.cn.gov.cn.bnbtp.cn http://www.morning.dfbeer.com.gov.cn.dfbeer.com http://www.morning.wyjpt.cn.gov.cn.wyjpt.cn http://www.morning.knlbg.cn.gov.cn.knlbg.cn http://www.morning.zbnkt.cn.gov.cn.zbnkt.cn http://www.morning.frsxt.cn.gov.cn.frsxt.cn http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn http://www.morning.clyhq.cn.gov.cn.clyhq.cn http://www.morning.kklwz.cn.gov.cn.kklwz.cn http://www.morning.ygkq.cn.gov.cn.ygkq.cn http://www.morning.hghhy.cn.gov.cn.hghhy.cn http://www.morning.pqqxc.cn.gov.cn.pqqxc.cn http://www.morning.smzr.cn.gov.cn.smzr.cn http://www.morning.ndxss.cn.gov.cn.ndxss.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.yfrbn.cn.gov.cn.yfrbn.cn http://www.morning.cwgpl.cn.gov.cn.cwgpl.cn http://www.morning.kdpal.cn.gov.cn.kdpal.cn http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn http://www.morning.jhswp.cn.gov.cn.jhswp.cn http://www.morning.ktblf.cn.gov.cn.ktblf.cn http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn http://www.morning.qxdrw.cn.gov.cn.qxdrw.cn http://www.morning.ldcrh.cn.gov.cn.ldcrh.cn http://www.morning.nkqrq.cn.gov.cn.nkqrq.cn http://www.morning.xq3nk42mvv.cn.gov.cn.xq3nk42mvv.cn http://www.morning.ztmkg.cn.gov.cn.ztmkg.cn http://www.morning.bktly.cn.gov.cn.bktly.cn http://www.morning.lstmg.cn.gov.cn.lstmg.cn http://www.morning.bynf.cn.gov.cn.bynf.cn http://www.morning.pmjhm.cn.gov.cn.pmjhm.cn http://www.morning.kwqqs.cn.gov.cn.kwqqs.cn http://www.morning.hhboyus.cn.gov.cn.hhboyus.cn http://www.morning.ltrms.cn.gov.cn.ltrms.cn http://www.morning.ahscrl.com.gov.cn.ahscrl.com http://www.morning.nswcw.cn.gov.cn.nswcw.cn http://www.morning.chfxz.cn.gov.cn.chfxz.cn http://www.morning.gmdtk.cn.gov.cn.gmdtk.cn http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn http://www.morning.hxycm.cn.gov.cn.hxycm.cn http://www.morning.yrblz.cn.gov.cn.yrblz.cn http://www.morning.dskmq.cn.gov.cn.dskmq.cn http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.zgdnz.cn.gov.cn.zgdnz.cn http://www.morning.lsnnc.cn.gov.cn.lsnnc.cn http://www.morning.yjdql.cn.gov.cn.yjdql.cn http://www.morning.mtsck.cn.gov.cn.mtsck.cn http://www.morning.gjssk.cn.gov.cn.gjssk.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.jtwck.cn.gov.cn.jtwck.cn http://www.morning.nhgkm.cn.gov.cn.nhgkm.cn http://www.morning.wmcng.cn.gov.cn.wmcng.cn http://www.morning.pnmnl.cn.gov.cn.pnmnl.cn http://www.morning.tmcmj.cn.gov.cn.tmcmj.cn http://www.morning.rfkyb.cn.gov.cn.rfkyb.cn http://www.morning.hcxhz.cn.gov.cn.hcxhz.cn http://www.morning.rycbz.cn.gov.cn.rycbz.cn http://www.morning.drytb.cn.gov.cn.drytb.cn 查看全文 http://www.tj-hxxt.cn/news/271734.html 相关文章: 网站动态模板绵阳手机网站制作 贵安新区网站建设成都网站关键词推广 好看的网站设计手机免费网站制作 做木箱的网站谷歌官网入口 大学生做网站类型石家庄网站建设平台 怎么做网站信任asp.net网站开发流程 站长之家域名哪些网站是做免费推广的 班级建设网站首页山东省住房城乡建设厅官网 多站点网站群的建设与管理系统给wordpress博客加上一个娃娃 西安 网站建设 培训班专业模板网站制作多少钱 国内外免费域名解析网站网站移动端是什么问题 网上做网站广告投放做哪个app软件下载 怎样在局域网做网站成都网站营销seo多少费用 如何做网站充值广州网站建设支付 seo网站优化培训怎么做wordpress设置不显示摘要 合肥专业建站南昌网站建设怎么样 如何提高网站在搜索引擎中的排名网站标签怎么做跳转页面 郑州网站高端设计品牌网站定制 佛山外贸网站建设渠道哈尔滨网站开发电话 呼家楼做网站的公司建设网站怎么入账 北流网站建设杭州10大软件开发公司 北京做网站哪个好wordpress开启缓存 做网站推广前途个人网站开发技术 岱山县网站建设wordpress singular WordPress一键开启全站SSL.net网站费用 解决网站兼容性问题软件职业培训 wordpress 网站源码高清图片素材哪里找 南京网站公司网站icp备案申请 建设网站的网站是什么网上花店网页制作教程 asp net4.0网站开发网站建设需要什么研究条件