ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

微服务:服务注册

2022-02-26 01:31:46  阅读:179  来源: 互联网

标签:负载 服务 server serviceId 注册 userservice eureka 加载


  • 服务注册

将一个服务注册给eureka

  • 引入依赖(与上一个依赖相近,但不相同。)
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 编写springboot配置文件
spring: 
 application:
    name: userservice #orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

修改OrderService的代码

  • 将写死的url用服务名来代替。
//原来
String url="http://localhost:8081/user/"+order.getUserId();
//现在
String url="http://userservice/user/"+order.getUserId();
  • 给RestTemplate添加@LoadBananced注解
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

原理:

  • 请求会被负载均衡拦截器拦截(LoadBalancerInterceptor),通过调用getHost()方法获取请求名称。
  • 通过RibbonLoadBalancerClient的execute()方法获取eureka中的serviceList
  • 然后通过getService方法完成负载均衡
  • 在之后调用ZoneAwareLoadBalancer中的chooseServer()方法来调用父类BaseLoadBalancer中的同名方法。
  • 最终会根据IRule类型的对象rule来指定负载均衡策略。默认roundRobinRule
    • ClientConfigEnabledRoundRobinRule
    • RoundRobinRule(轮询策略)
    • RandomRule(随机策略)
    • RetryRule
  • 最终拿到服务信息。
public <T> T execute(String serviceId, LoadBalancerRequest<T> request, Object hint)
    throws IOException {
    ILoadBalancer loadBalancer = getLoadBalancer(serviceId);//获取serviceList
    Server server = getServer(loadBalancer, hint);
    if (server == null) {
        throw new IllegalStateException("No instances available for " + serviceId);
    }
    RibbonServer ribbonServer = new RibbonServer(serviceId, server,
                                                 isSecure(server, serviceId),
                                                 serverIntrospector(serviceId).getMetadata(server));

    return execute(serviceId, ribbonServer, request);
}

自定义负载均衡策略

  1. 通过代码方式

    通过配置类,往IOC容器中添加一个IRole组件,可以将任何一个它的实现作为返回值返回。

@Bean
public IRule setIRule(){
    return new RandomRule();
}
  1. 配置文件方式(不推荐,优先级低且只能指定一个服务)
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

rebbin的饥饿加载模式

  • 懒加载:访问时才加载。
  • 饥饿加载:服务器启动时就加载。
ribbon:
  eager-load:
    enabled: true #默认值为false,为懒加载。
    clients: userservice #指定对谁进行饥饿加载
    # clients是一个List集合,如果需要对多个服务进行饥饿加载使用yaml的写法,即,
    # clients:
    #  - userservice
    #  - userservice

标签:负载,服务,server,serviceId,注册,userservice,eureka,加载
来源: https://www.cnblogs.com/Boerk/p/15938364.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有