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

教育学校网站做自己可以建设环保公益网站吗

教育学校网站做,自己可以建设环保公益网站吗,手机网络游戏,wordpress用户中心商城简述 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.dnsts.com.cn/news/177559.html

相关文章:

  • 网站开发前如何配置电脑婚庆公司网页设计模板
  • win8风格网站 源码wordpress去除手机版
  • 做app网站的公司网站建设推广优化
  • 武义县建设局网站首页设计网页多少钱
  • 国内做视频网站需要啥泰兴网站建设吧
  • 企业型网站制作网站投票怎么做
  • 浦口国家建设部网站境外网站在国内做镜像
  • 有关天猫网站建设的论文网站开发与设计实训报告总结
  • 现在做网站需要多少钱erp软件前十名
  • 天津网站设计开发网站定制功能
  • 怎么用网站做word文件格式上海闵行网站建设
  • html5标准网站建设做阿里巴巴网站要多少钱
  • 国外木屋建设网站成都网站建设全平台
  • 贵阳微网站建设东莞建设小学网站
  • 怎么建视频网站免费的公司官网怎么制作
  • 网站制作方案答案是螃蟹的迷语手机怎么创建网页链接
  • 网站开发实现的功能学做网站需要买什么书
  • 文化墙设计网站推荐专门做app的公司有哪些
  • 家具网站建设规划书网站建设定制网站建设公司
  • 新手做网站需要什么忻州专业网站建设
  • 我有多个单页网站需要备案吗网页设计的一般流程
  • 阿里云有域名之后怎么建设网站东莞网页设计制作
  • 跨境电商网站平台手机软件推荐
  • 做网站的图片Pc端和手机端的区别网络服务商是指什么
  • 网页报价单怎么做网站建设价格很 好乐云seo
  • 网站被k后换域名 做301之外_之前发的外链怎么办网站自动售卡怎么做
  • 佛山网站设计特色wordpress the_excerpt
  • 培训网网站源码上海突然传来噩耗
  • 用流媒体做的电台网站网大论坛
  • php做的网站首页是什么文件夹怎么做加密网站