Java教程

微服务:服务注册

本文主要是介绍微服务:服务注册,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • 服务注册

将一个服务注册给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
这篇关于微服务:服务注册的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!