LoadBalance服务调用
创建两个provider01 和 provider02 ,, spring.application.name 配置相同名字
spring:
application:
name: UserProvider
server:
port: 3000
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka,http://localhost:1112/eureka
spring:
application:
name: UserProvider
server:
port: 3001
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka,http://localhost:1112/eureka
在消费者中使用 LoadBalanceClient 对象,实现负载均衡:
- 注入一个普通的 RestTemplate 对象
- 使用 LoadBalanceClient 和 RestTemplate 实现负载均衡
@Service
public class UserServiceImpl implements UserService {
@Autowired
RestTemplate restTemplate;
// 支持负载均衡的调用客户端
@Autowired
LoadBalancerClient loadBalancerClient;
@Override
public Map findAllUser() {
// 通过客户端调用服务均衡器查找服务
ServiceInstance inst = loadBalancerClient.choose("UserProvider");
String url ="http://"+ inst.getHost()+":"+inst.getPort();
System.out.println(url);
Map map = restTemplate.getForObject(url, Map.class);
return map;
}
}
Ribbon
给RestTemplate bean添加 @LoadBalanced 注解,变成可以负载均衡的RestTemplate
@Bean
@LoadBalanced // 开启ribbon
RestTemplate restTemplate(){
return new RestTemplate();
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
RestTemplate restTemplate;
@Override
public Map findAllUser() {
Map map = restTemplate.getForObject("http://UserProvider", Map.class);
return map;
}
}
openfeign
和Ribbon 一个性质的东西,Ribbon.需要手动调用目标服务
OpenFeign是 spring cloud 在 feign 的基础上支持了 SpringMVc注解,如@RequestMapping等
引用:https://blog.csdn.net/zimou5581/article/details/89949852
feign简化负载均衡书写,使用@FeignClient(服务名字) 声明一个接口,在接口中使用 RequestMapping 来匹配服务端的每一个接口,与之对应,,,在Controller层调用这个接口,就相当于远程调用了服务端的接口。。
导入包:
org.springframework.cloud spring-cloud-starter-openfeign org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-client
配置文件:
server:
port: 3200
spring:
application:
name: userweb02
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka,http://localhost:1112/eureka
定义一个接口引用远程服务
@FeignClient(value = "UserProvider")
public interface UserService {
@GetMapping("/")
public Map findAll();
}
启动类要开启openfeign 使用 @EnableFeignClients
openFeign配置日志:
这里指定的Level级别是FULL,Feign支持4种级别:
NONE:不记录任何日志信息,这是默认值。
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
配置一个日志的Bean
@Configuration
public class FeignConfig {
@Bean
public Logger.Level getFeignLogger(){
return Logger.Level.FULL;
}
}
设置指定包的日志打印:
# 设置消费者指定包日志级别
logging:
level:
com:
cj: debug



