环境 springboot + springcloud
Eureka-Server注册中心服务端
pom.xml
导入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>2.2.7.RELEASE</version> <!-- 一般在父工程中就配置了 -->
</dependency>
aplication.yml
配置
server:port: 10086
spring:application:name: eurekaserver # 服务名,需要配置
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka
EurekaServerApplication.java
启动类配置
@SpringBootApplication
@EnableEurekaServer // 开启eureka的注册中心功能
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
Service提供者
pom.xml
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.7.RELEASE</version> <!-- 一般在父工程中就配置了 -->
</dependency>
application.yml
spring:application:name: userservice
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka
consumer消费者
(消费者也可以作为提供者身份出现)
pom.xml
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.7.RELEASE</version> <!-- 一般在父工程中就配置了 -->
</dependency>
application.yml
spring:application:name: orderservice
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka
OrderApplication
配置RestTemplate的Bean加入到Spring容器中
@MapperScan("cn.xxx.order.mapper")
@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}@Bean@LoadBalanced # 负责均衡 和 做拉取服务public RestTemplate getRestTemplate() {return new RestTemplate();}
}
OrderService
利用RestTemplate调用 UserService接口
@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {Order order = orderMapper.findById(orderId);// restTemplate.getForObject(请求地址, 返回值类型);String url = "http://userservice/user/" + order.getUserId(); // userservice是提供者的spring.application.nameUser user = restTemplate.getForObject(url, User.class);order.setUser(user);return order;}
}
Ribbon负载均衡 (service配置)
方式1:重写IRule接口的实现Bean
@Bean
public IRule randomRule() {return new RandomRule();
}
方式2:配置文件指定
application.xml
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 # 当第一次访问时才会拉取服务再做缓存
饥饿加载配置
:容器加载完毕后就拉取服务做缓存
ribbon:eager-load:enabled: trueclients:- userservice # 指定一启动就加载的服务,可以配置多个- xxxservice1