spring cloud Eureka简单负载均衡实现

最近需要加深spring的学习做个项目,可能涉及到微服务架构、负载均衡、数据库。

首先搭建好了基本的环境,搜索了些资料,先学习下服务治理:

服务治理

  是微服务架构中最核心最基本的模块。用于实现各个微服务实例的自动化注册与发现。

  服务注册:

    在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机和端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。

    服务注册中心还需要以心跳的方式去监测清单中的服务是否可用,若不可用,需从服务清单中剔除,达到清楚障碍的目的。

  服务发现:

    服务的调用通过向服务名发起请求调用实现。调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。

Netflix Eureka

  Spring Cloud Eureka 使用Netflix Eureka来实现服务注册于发现。既包含服务端组件也包含客户端组件,且均采用java编写,因此Eureka适用于java实现的分布式系统,或与JVM兼容语言构建的系统。

  因为Eureka服务端的服务治理机制提供了完备的RESTful API,也支持非java语言构建的微服务应用纳入Eureka的服务治理体系中去。

  Eureka服务端:

    服务注册中心,支持高可用配置。依托于强一致性提供良好的服务实例可用性,应用于不同的故障场景。

    以集群部署,分片出现故障时,Eureka进入自我保护模式,其他分片提供服务的发现与注册,当故障分片恢复时,集群中的其他分片会把故障分片的状态再次同步回来。

  Eureka客户端:

    处理服务的注册于发现。

    在程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。也可以从注册中心查询当前注册的服务信息并把他们缓存到本地周期性地刷新服务状态。

Eureka实现

   然后搜索了一个spring cloud Eureka 负载均衡的例子,按照例子顺序进行:

例子地址:https://blog.csdn.net/nanbiebao6522/article/details/80574463

代码其他不再描述,其中遇到一个问题,在创建了消费者以后,根据服务的名称一直报错说无法找到这个名称的服务,这个比较纠结了好一会,后面换了其他方式才解决,应该是和@LoadBalanced的注解有关,或许是没有添加依赖,还未去查证,解决的方法就是不用注解来实现服务的查找:

@Autowired
LoadBalancerClient loadBalancerClient;




ServiceInstance serviceInstance = loadBalancerClient.choose("eureka-client");
String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "getUser?id="+id;
System.out.println(url);
成功解决。

其中第二个服务提供者我是另起的工程,项目名和第一个不一样,只有注册的服务名称和调用的方法一样就行。

猜你喜欢

转载自blog.csdn.net/ovejur/article/details/88392254
今日推荐