搭建Eureka服务,实现负载均衡
服务器引入依赖
<!-- eureka服务器依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
客户端引入依赖
<!-- eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
服务端配置
server:
port: 10086 #服务端口
spring:
application:
name: eurekaserver #服务端名称
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
客户端配置
spring:
application:
name: orderservice #客户端名称
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka #服务器的ip地址
服务端启动类中,开启EurekaServer服务
@EnableEurekaServer //开启EurekaServer服务
@SpringBootApplication
public class EurekaApplication {
public static void main( String[] args ) {
SpringApplication.run(EurekaApplication.class,args);
}
}
在restTemplate中,添加负载均衡注解
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@Bean
@LoadBalanced //开启负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
@Bean //更改负载均衡规则为随机数,全局配置,之后对所有请求都采用这项规则
public IRule randomRule(){
return new RandomRule();
}
}
服务消费者向服务提供者发送http请求
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
User user = new User();
String url = "http://userservice/user/"+order.getUserId(); //userservice是前面配置的客户端或服务端名称
order.setUser(restTemplate.getForObject(url,User.class));
// 4.返回
return order;
}
也可以对单个服务提供者更改某项负载均衡规则。还有加载方式,默认是懒加载,可以改成饥饿加载
userservice: #服务提供者的服务名
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则
ribbon:
eager-load:
enabled: true #开启饥饿加载
clients:
- userservice
# -userservice 需要让多个服务提供者对此消费者开启饥饿加载就挨个这样写