spring-cloud集成eureka以及ribbon的配置和使用

需要导入的依赖

父工程

			 <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Hoxton.SR10version>
                <type>pomtype>
                <scope>importscope>
            dependency>

子工程(客户端) 需要两个

依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
    dependencies>

yml配置

eureka:
  client:
    service-url:   # eureka地址信息
      defaultZone: http://127.0.0.1:10086/eureka
spring:
  application:
    name: order-service  # 得使用模块名 到时候得从注册中心拉取对应模块的地址

子工程(eureka客户端)

依赖

   <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
    dependencies>

yml配置

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:   # eureka地址信息
      defaultZone: http://127.0.0.1:10086/eureka

这边为了图方便 两个客户端的controller和mapper都进行了省略…

两个模块之间相互调用使用restTemplate进行,在调用的客户端内配置
//使用ribbon负载均衡 
@LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
@Service
public class OrderService {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private OrderMapper orderMapper;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //调用的服务名称为 user-service
        String url = "http://user-service/user/" + order.getUserId();

        User user = restTemplate.getForEntity(url, User.class).getBody();
        order.setUser(user);

        // 4.返回
        return order;
    }
}

Ribbon

负载均衡Ribbon的规则配置

ribbon默认实现的是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询

方法
  1. 创建一个config配置注册到spring容器中(整个模块调用都为以下设置的规则)

     @Bean
        public IRule iRule(){
         //设置为轮询方法
            return new RandomRule();
        }
    
  2. 可在yml配置文件中设置单个服务模块的调用规则

    # 这里设置的是user-service模块使用轮询方法
    user-service:
     ribbon: 
      NFLoadBanancerRuleClassName: com.netflix.loadbanancer.RandomRule
    
Ribbon的饥饿加载

Ribbon默认采用懒加载方式 ,当项目启动之后用户访问了才进行第一次加载。这样影响项目部署之后第一个访问接口用户的体验,然后我们这边可以使用饥饿加载的方式让Ribbon在项目启动完成后之间加载.

在客户端内yml进行配置

ribbon:
 eager-load:
  enabled: true # 开启饥饿加载
  clients: 
   - xxxx  # 指定饥饿加载的服务名称

你可能感兴趣的:(eureka,ribbon,云原生)