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

建站平台功能结构图洛阳电商网站建设

建站平台功能结构图,洛阳电商网站建设,上海有限公司,linux wordpress 安装目录 一、LoadBalancer 负载均衡 1.1、前言 1.2、LoadBalancer 负载均衡底层实现原理 二、整合 OpenFeign LoadBalancer 2.1、所需依赖 2.2、具体实现 2.3、自定义负载均衡策略 一、LoadBalancer 负载均衡 1.1、前言 在 2020 年以前的 SpringCloud 采用 Ribbon 作为负载…目录 一、LoadBalancer 负载均衡 1.1、前言 1.2、LoadBalancer 负载均衡底层实现原理 二、整合 OpenFeign LoadBalancer 2.1、所需依赖 2.2、具体实现 2.3、自定义负载均衡策略 一、LoadBalancer 负载均衡 1.1、前言 在 2020 年以前的 SpringCloud 采用 Ribbon 作为负载均衡但是 2020 年之后SpringCloud 吧 Ribbon 移除了而是使用自己编写的 LoadBalancer 替代. 因此如果在没有加入 LoadBalancer 依赖的情况下使用 RestTemplate 或 OpenFeign 远程调用就会报以下错误 这就是在告诉你 LoadBalancing是未定义的OpenFeign 中引入的依赖会使用 LoadBalancing然后问你是不是忘记加入 spring-cloud-starter-loadbalancer 依赖. 1.2、LoadBalancer 负载均衡底层实现原理 a在添加了 LoadBalanced 注解之后会启用拦截器对我们发起的服务调用请求进行拦截注意这里是针对我们发起的请求进行拦截叫做 LoadBalancerInterceptor它实现了 ClientHttpRequestInterceptor 接口 FunctionalInterface public interface ClientHttpRequestInterceptor {ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException; }intercept 方法如下 public ClientHttpResponse intercept(final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) throws IOException {URI originalUri request.getURI();String serviceName originalUri.getHost();Assert.state(serviceName ! null, Request URI does not contain a valid hostname: originalUri);return (ClientHttpResponse)this.loadBalancer.execute(serviceName, this.requestFactory.createRequest(request, body, execution)); }主要就是这里的 intercept 方法拦截的请求. b这个拦截器具体做了什么事情呢我们知道被拦截的请求地址并不是一个有效的主机地址而是服务名称因此需要通过 服务注册中心Nacos才能得到需要访问的主机地址. loadBalancer.execute() 就是在获取请求对应的服务实例信息. //从上面给进来了服务的名称和具体的请求实体 public T T execute(String serviceId, LoadBalancerRequestT request) throws IOException {String hint this.getHint(serviceId);LoadBalancerRequestAdapterT, DefaultRequestContext lbRequest new LoadBalancerRequestAdapter(request, new DefaultRequestContext(request, hint));SetLoadBalancerLifecycle supportedLifecycleProcessors this.getSupportedLifecycleProcessors(serviceId);supportedLifecycleProcessors.forEach((lifecycle) - {lifecycle.onStart(lbRequest);});//可以看到在这里会调用choose方法自动获取对应的服务实例信息ServiceInstance serviceInstance this.choose(serviceId, lbRequest);if (serviceInstance null) {supportedLifecycleProcessors.forEach((lifecycle) - {lifecycle.onComplete(new CompletionContext(Status.DISCARD, lbRequest, new EmptyResponse()));});//没有发现任何此服务的实例就抛异常之前的测试中可能已经遇到了throw new IllegalStateException(No instances available for serviceId);} else {//成功获取到对应服务的实例这时就可以发起HTTP请求获取信息了return this.execute(serviceId, serviceInstance, lbRequest);} }c因此实际上在进行负载均衡的时候会向服务的注册中心Nacos发起一个请求选择一个可用的服务如果有多个然后返回此服务的主机地址等信息. 二、整合 OpenFeign LoadBalancer 2.1、所需依赖 在需要进行远程调用的服务中引入openfeign 和 loadbalancer 依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency2.2、具体实现 a启动类中添加 EnableFeignClients 注解 SpringBootApplication EnableFeignClients public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}}b例如在 user 微服务中调用 article 微服务接口那么就需要在 user 为服务中创建一个 article 的客户端. FeignClient(article) public interface ArticleClient {GetMapping(/article/start)String userStart();}服务提供者 RestController RequestMapping(/article) public class ArticleController {GetMapping(/start)public String userStart() {System.out.println(article 被远程调用了);return article ok ~;}}服务消费者 RestController RequestMapping(/user) public class UserController {Autowiredprivate ArticleClient articleClient;GetMapping(/start)public String userStart() {String result articleClient.userStart();return user ok ~\n result;}}c访问 user 服务接口可以看到成功进行了远程调用 d连续访问 10 次可以发现在 OpenFeign 的声明式客户端中不用加 LoadBalancer 注解也会实现默认的 “轮询” 负载均衡策略RestTemplate 方式必须加. 在 BlockingLoadBalancerClient 中添加断点就可以看到我们指定的策略默认是轮询RoundRobin 2.3、自定义负载均衡策略 LoadBalancer默认提供了两种负载均衡策略 RandomLoadBalancer - 随机分配策略(默认) RoundRobinLoadBalancer - 轮询分配策略 现在希望修改默认的负载均衡策略为随机分配策略就需要创建随机分配策略的配置类不用加 Configuration //这里不用加 Configuration 注解 public class LoadBalancerConfig {//将官方提供的 RandomLoadBalancer 注册为BeanBeanpublic ReactorLoadBalancerServiceInstance randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory){String name environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);} }通过 LoadBalancerClient(value 服务名, configuration LoadBalancerConfig.class)  指定负载均衡策略为随机. FeignClient(article) LoadBalancerClient(value article, configuration LoadBalancerConfig.class) //指定负载均衡策略为随机 public interface ArticleClient {// LoadBalanced(可以写也可以不用写默认所有方法都自动加 LoadBalanced)GetMapping(/article/start)String userStart();}
http://www.hkea.cn/news/14468455/

相关文章:

  • 双流区的规划建设局网站wordpress 安卓接口
  • 上海建站seo深圳品牌设计公司深圳品牌设计公司
  • 做刷单哪个网站找小白手把手教你入侵网站修改数据
  • 泰安网站建设步骤的物app
  • 开网站怎么赚钱湛江建设工程交易中心网站
  • 电子商务网站建设的意义是什么意思建设银行网站扫码支付在哪里
  • 网站建设项目清单价格免费网站个人注册
  • 百度推广苏州公司内页优化
  • 整站seo运营汕头企业自助建站
  • 在线音乐播放网站模板百度指数怎么下载
  • 云虚拟主机和网站建设php做购物网站怎么样
  • 沧州网站优化公司优秀个人网站推荐
  • 域名转移影响网站访问吗哈尔滨网站设计哪家公司好
  • 论述农产品电商网站建设黄山网站建设免费咨询
  • 做个网站一般多少钱企业安全文化建设论文
  • 网站建站系统程序信阳市网站建设公司
  • 网站如何做容易收录wordpress国内免费模板
  • 企业网站策划方案书百度推广服务费一年多少钱
  • 复兴区网络推广公司关键词优化软件
  • 做php网站前端价格seo点击排名工具
  • 网站快捷按钮以什么方式做品牌网哪个比较权威
  • 一键生成论文的网站长春公司做网站
  • 网站建设工作组怎么推广自己的公司网站
  • 网站设计编程有哪些衡阳网站推广
  • 用wordpress建站学什么恋月wordpress
  • 网站桥页也叫延安市住建建设网站
  • 柳州住房和城乡建设部网站网站集约化建设建设成效
  • python做网站 jsp网站佛山网站建设seo优化
  • 苍南具城乡建设局网站百度app免费下载
  • 存量房交易网站建设盐城网站建设案例