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

珠海高端网站制作公司关于公司建网站

珠海高端网站制作公司,关于公司建网站,企业网站优化包括哪三个层面,网络商城是什么文章目录 使用Ribbon自带负载均衡算法添加负载均衡算法ConfigurationRestTemplate使用上面负载均衡算法 自定义负载均衡算法负载均衡算法实现RestTemplate在Controller中使用该负载均衡算法ServiceIInstance解释 使用Ribbon自带负载均衡算法 添加负载均衡算法Configuration /…

文章目录

    • 使用Ribbon自带负载均衡算法
      • 添加负载均衡算法Configuration
      • RestTemplate使用上面负载均衡算法
    • 自定义负载均衡算法
      • 负载均衡算法实现
      • RestTemplate
      • 在Controller中使用该负载均衡算法
      • ServiceIInstance解释

使用Ribbon自带负载均衡算法

添加负载均衡算法Configuration

//注意package位置假设启动器为@ComponentScan("com.test.springcloud")
package com.test.config
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MySelfRule
{@Beanpublic IRule myRule(){return new RandomRule();//定义为随机}
}

注意:
官方文档明确给出了警告
这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,
否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了。

RestTemplate使用上面负载均衡算法

package com.test.springcloud.config
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ApplicationContextConfig
{@Bean@LoadBalanced //添加负载均衡配置注解,如果自定义的话不需要使用该注解否则报错public RestTemplate getRestTemplate(){return new RestTemplate();}
}

自定义负载均衡算法

负载均衡算法实现

定义负载均衡算法接口

public interface LoadBalancer
{ServiceInstance instances(List<ServiceInstance> serviceInstances);
}

实现负载均衡算法

@Component
public class MyLB implements LoadBalancer
{//通过CAS(乐观锁)的方式进行,本质是通过CompareAndSet,先比较后赋值的方式,只有当前值和期望值相同时才可以进行赋值private AtomicInteger atomicInteger = new AtomicInteger(0);public final int getAndIncrement(){int current;int next;do {current = this.atomicInteger.get();next = current >= 2147483647 ? 0 : current + 1;}while(!this.atomicInteger.compareAndSet(current,next));System.out.println("*****第几次访问,次数next: "+next);return next;}//负载均衡算法:rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标  ,每次服务重启动后rest接口计数从1开始。@Overridepublic ServiceInstance instances(List<ServiceInstance> serviceInstances){int index = getAndIncrement() % serviceInstances.size();return serviceInstances.get(index);}
}

以上实现负载均衡算法的instance可自定义

RestTemplate

package com.test.springcloud.config
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ApplicationContextConfig
{@Bean//@LoadBalanced //去掉这个注解public RestTemplate getRestTemplate(){return new RestTemplate();}
}

在Controller中使用该负载均衡算法

public class Controller{@GetMapping(value = "/consumer/payment/lb")public String getPaymentLB(){List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");if(instances == null || instances.size() <= 0){return null;}// 在下面有解释ServiceInstanceServiceInstance serviceInstance = loadBalancer.instances(instances);URI uri = serviceInstance.getUri();return restTemplate.getForObject(uri+"/payment/lb",String.class);}}

ServiceIInstance解释

ServiceInstance 是 Spring Cloud 提供的一个接口,用于表示服务的实例信息。它提供了获取服务实例的相关信息和元数据的方法。
ServiceInstance 接口定义了以下常用方法:

  • String getServiceId(): 获取服务名称(serviceId)。
  • String getHost(): 获取服务实例的主机名。
  • int getPort(): 获取服务实例的端口号。
  • boolean isSecure(): 返回服务实例是否使用安全协议(如 HTTPS)进行通信。
  • URI getUri(): 获取服务实例的完整 URI。
  • Map<String, String> getMetadata(): 返回服务实例的元数据,这些元数据可以由服务提供方自定义。
  • 通过使用 DiscoveryClient(服务发现客户端)获取到的服务实例列表,可以进一步使用 ServiceInstance 接口来获取每个服务实例的具体信息。
    示例:
@Autowired
private DiscoveryClient discoveryClient;public void getServiceInstances(String serviceName) {List<ServiceInstance> instances = discoveryClient.getInstances(serviceName);for (ServiceInstance instance : instances) {String serviceId = instance.getServiceId();String host = instance.getHost();int port = instance.getPort();boolean isSecure = instance.isSecure();URI uri = instance.getUri();Map<String, String> metadata = instance.getMetadata();// 打印服务实例信息System.out.println("Service ID: " + serviceId);System.out.println("Host: " + host);System.out.println("Port: " + port);System.out.println("Is Secure: " + isSecure);System.out.println("URI: " + uri);System.out.println("Metadata: " + metadata);}
}
http://www.yayakq.cn/news/822489/

相关文章:

  • 怎么查询网站备案服务商是哪个专业做酒类营销的网站
  • 北京网站建设的关键词百度推广开户费
  • 书籍网站建设的目的潍坊 logo设计公司
  • 网站建设需经历的步骤关于建设 医院网站的请示
  • 南城网站建设公司如何wordpress 网页飘窗
  • 南宁建设集团招聘信息网站制作网站的模板下载软件
  • 网站的跳出率提供网站建设电话
  • 权威的南通网站建设wordpress维护服务
  • 购物网站要求wordpress 嵌入播放ppt
  • 网站建设与规划案例企业seo排名服务
  • dw 怎么做钓鱼网站荷城网站制作公司
  • 书画展示网站模板仿新浪微博网站代码
  • 做网站需要字体授权wamp安装wordpress
  • pc端网站建设价格明细表做国际贸易哪个网站好
  • 番禺做网站技术广东美景园林建设有限公司网站
  • 晋中网站建设费用南京网站设计公司兴田德润优惠吗
  • 网站的建设费计入什么费用网站职业技能培训学校
  • 网站服务器多少钱淘宝网上购物商城
  • 网站开发 居易国际长臂挖机出租东莞网站建设
  • 建设工程教育网校合肥专业网站优化价格
  • 怎么用PHP做网站留言板wordpress网站视频播放
  • 建设外卖网站需要哪些资质西安网络推广seo0515
  • 上线了建的网站免费吗大连网站外包
  • 仙居手机网站开发旅游网站制作代码
  • 当当网网站的建设过程查询企业的app哪个好
  • 做网站优化有前景吗荥阳建设网站
  • 网站色调红黑线上推广策略
  • 摄影作品网站风景东莞气缸东莞网站建设
  • 电子商务网站开发背景与原因怎么做网站登录界面
  • 邢台在百度上做个网站做好网站优化的方法有哪些?