RestTemplate
+++
LoadBalancer默认提供了两种负载均衡策略:
- RandomLoadBalancer - 随机分配策略
- (默认) RoundRobinLoadBalancer - 轮询分配策略()
+++
默认加载策略是随机的UserApplicaton1和UserApplicaton2
自定义策略,加一个配置类
@Configuration
public class BeanConfig {
@Bean
@LoadBalanced
RestTemplate template(){
return new RestTemplate();
}
}
@Configuration
@LoadBalancerClient(value = "user-service", //指定为 user-service 服务,只要是调用此服务都会使用我们指定的策略
configuration = LoadBalancerConfig.class) //指定我们刚刚定义好的配置类
public class BeanConfig {
@Bean
@LoadBalanced
RestTemplate template(){
return new RestTemplate();
}
}
++++
openFeign 实现负载均衡
borrow项目导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
删除之前的配置
自定义两个接口
@FeignClient("book-service")
public interface BookClient {
//路径保证和其他微服务提供的一致即可
@RequestMapping("/book/{bid}")
Book getBookById(@PathVariable("bid") int bid); //参数和返回值也保持一致
}
@FeignClient("user-service")
public interface UserClient {
//路径保证和其他微服务提供的一致即可
@RequestMapping("/user/{uid}")
User getUserById(@PathVariable("uid") int uid); //参数和返回值也保持一致
}
编写借阅接口实现类
@Service
public class BorrowServiceImpl extends ServiceImpl<BorrowMapper, Borrow> implements BorrowService {
@Resource
BorrowMapper mapper;
@Resource
UserClient userClient;
@Resource
BookClient bookClient;
@Override
public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
List<Borrow> borrow = mapper.getBorrowsByUid(uid);
User user = userClient.getUserById(uid);
//这里不用再写IP,直接写服务名称 book-service
List<Book> bookList = borrow
.stream()
.map(b -> bookClient.getBookById(Math.toIntExact(b.getBid())))
.collect(Collectors.toList());
return new UserBorrowDetail(user, bookList);
}
}
+++
BorrowDetail(user, bookList);
}
}
[外链图片转存中...(img-ExG0bRpy-1685199834075)]
+++