网站推广seo是什么,在线界面设计,网站建设工作汇报,常熟智能网站开发引入负载均衡
在消费方引入负载均衡机制#xff0c;同时简化获取服务提供者信息的流程 Spring Cloud引入组件LoadBalance实现负载均衡 添加依赖
dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-web同时简化获取服务提供者信息的流程 Spring Cloud引入组件LoadBalance实现负载均衡 添加依赖
dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-web/artifactId
/dependency
dependency
groupIdcom.alibaba.cloud/groupId
artifactIdspring-cloud-starter-alibaba-nacosdiscovery/artifactId
/dependency
dependency
groupIdorg.springframework.cloud/groupId
artifactIdspring-cloud-starter-loadbalancer/artifactId
/dependencyproperties配置
spring.application.nameservice-consumer
# Nacos 服务发现与注册配置其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addrlocalhost:8848
# 注册到 nacos 的指定 namespace默认为 public
spring.cloud.nacos.discovery.namespacepublic
server.port6082主类上添加对应的注解
EnableDiscoveryClient
SpringBootApplication
public class Consumer2Application {
public static void main(String[] args) {
SpringApplication.run(Consumer2Application.class, args);
}
LoadBalanced
Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}定义对应的控制器需要访问服务提供者
RestController
RequestMapping(/consumer)
public class ConsumerController {
Autowired
private RestTemplate restTemplate;
GetMapping(/{name})
public String test(PathVariable String name){
//使用LB后具体的URL地址中使用服务提供者的名称来替代原始的主机名和端口号
String res restTemplate.getForObject(http://serviceprovider/users/hello?username name, String.class);
return res;
}
}验证测试 缓存配置
使用LB从Nacos获取服务的注册信息可以在本地进行缓存。添加配置即可
spring.cloud.loadbalancer.cache.enabledtrue 启用本地缓存可以根据实际情况权衡
spring.cloud.loadbalancer.cache.capacity1000 设置缓存空间大小
spring.cloud.loadbalancer.cache.ttl20 缓存的存活时间单位为s订阅更新
缓存有可能和远程的注册信息不一致所以引入长连接的订阅实现Nacos的主动通知更改
spring.cloud.nacos.discovery.watch.enabledtrue引入OpenFeign
添加依赖
dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-web/artifactId
/dependency
dependency
groupIdcom.alibaba.cloud/groupId
artifactIdspring-cloud-starter-alibaba-nacosdiscovery/artifactId
/dependency
dependency
groupIdorg.springframework.cloud/groupId
artifactIdspring-cloud-starter-loadbalancer/artifactId
/dependency
dependency
groupIdorg.springframework.cloud/groupId
artifactIdspring-cloud-starter-openfeign/artifactId
/dependency定义配置
server.port6083
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
spring.application.nameservice-consumer
# Nacos 服务发现与注册配置其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addrlocalhost:8848
# 注册到 nacos 的指定 namespace默认为 public
spring.cloud.nacos.discovery.namespacepublic在主类或者配置类上添加注解以支持OpenClient应用
EnableFeignClients // 激活 FeignClient
EnableDiscoveryClient
SpringBootApplication
public class Consumer3Application {
public static void main(String[] args) {
SpringApplication.run(Consumer3Application.class, args);
}
}定义http伪客户端接口
FeignClient(service-provider) // 指向服务提供者应用
public interface ProviderClient {
GetMapping(/users/hello)
public String sayHello(RequestParam(username) String username);
}定义控制器通过feign接口调用远程的服务提供者
RestController
RequestMapping(/consumer)
public class ConsumerController {
Autowired
private ProviderClient providerClient;
GetMapping(/{name})
public String test(PathVariable String name){
String res providerClient.sayHello(name);
return res;
}
}测试 负载均衡策略配置 LB中提供了三种负载均衡策略同时提供接口允许用户自定义扩展 1、定义配置类
public class FeignClientConfiguration {
Bean
public ReactorLoadBalancer
reactorServiceInstanceLoadBalancer(ObjectProvider
serviceInstanceListSuppliers, Environment environment) {
String name
environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(serviceInstanceListSuppliers, name);
}
}2、可以全局或者局部配置使用设置的负载均衡策略
EnableFeignClients(defaultConfiguration FeignClientConfiguration.class)
EnableDiscoveryClient
SpringBootApplication
public class Consumer3Application {
public static void main(String[] args) {
SpringApplication.run(Consumer3Application.class, args);
}
}局部配置 如果通过使用OpenFeign访问远程的服务提供者则可以配置由于网络、连接、读取等问题出现访问失 败时自动执行重试处理 1、首先定义配置
public class FeignClientConfiguration {
Bean
public Retryer retryer(){
return new Retryer.Default(100, 1000, 2);
//表示每间隔100ms最大间隔1000ms重试一次最大重试次数是1因为第三个参数包含了
第一次请求
}
}2、可以在注解中进行全局配置和局部配置 全局配置
EnableFeignClients(defaultConfiguration FeignClientConfiguration.class)
EnableDiscoveryClient
SpringBootApplication
public class Consumer3Application {
public static void main(String[] args) {
SpringApplication.run(Consumer3Application.class, args);
}
}局部配置
FeignClient(valueservice-provider,configuration
FeignClientConfiguration.class)
public interface ProviderClient {
GetMapping(/users/hello)
public String sayHello(RequestParam(username) String username);
}服务降级配置
在使用注册中心时OpenFeign作为服务间通信的组件它本身集成了负载均衡能力、错误重试、日 志、服务熔断等机制同时也能够支持点对点的通信方式让开发者感觉更像是调用本地接口而不是 发起HTTP请求 具体的服务降级是依赖Sentinel组件实现的所以需要添加Sentinel依赖 1、添加依赖
dependency
groupIdcom.alibaba.cloud/groupId
artifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency2、开启服务熔断配置application.properties
feign.circuitbreaker.enabledtrue 13、定义对应的Fallback Factory实现
Component
public class ProviderClientFallbackFactory implements
FallbackFactoryProviderClient {
Override
public ProviderClient create(Throwable cause) {
return new ProviderClient() {
Override
public String sayHello(String username) {
return cause.getMessage();
}
};
}
}4、配置使用Fallback降级处理
FeignClient(valueservice-provider,fallbackFactory
ProviderClientFallbackFactory.class)
public interface ProviderClient {
GetMapping(/users/hello)
public String sayHello(RequestParam(username) String username);
}