Eureka详解系列(二)--如何使用Eureka(原生API,无Spring)
简介
通过上一篇博客 Eureka详解系列(一)--先谈谈负载均衡器 ,我们知道了 Eureka 是什么以及为什么要使用它,今天,我们开始研究如何使用 Eureka。
在此之前,先说明一点。网上几乎所有关于 Eureka 的文章都是基于 Spring 的,但本文的例子不会有任何 Spring 的代码,我尽量使用 Eureka 原生的 API,后面的源码分析也是如此。因为 Spring 把 Eureka 藏得越好,我们研究起来就会越困难,毕竟我写这个系列不是只为了学会怎么使用 Eureka,我们还要分析它的源码。当然,实际项目中就没必要这么搞了。
另外,这只是一个简单的例子,只配置了几个必备的参数,下篇博客会展开分析。
项目环境
os:win 10
jdk:1.8.0_231
eureka:1.10.11
tomcat:9.0.21
maven:3.6.3
使用例子
如何设计例子
通过 Eureka 的结构图可以知道,我们需要分别搭建 Eureka Server、Eureka Client for application service、Eureka Client for application client 三个模块。

我参考了官网的例子,并做了一点小改动,代码和配置就不一一列出了,具体源码见文末链接。

- eureka-server:作为 Eureka Server,它是一个独立的 Web 服务,能够处理 Eureka Client 的 rest 请求:注册、续约、注销服务,以及获取服务的信息。它需要打包成 war 包运行在 tomcat 上。
- eureka-service:作为 application service,它需要向 Eureka Server 注册自己,并监听 Eureka Client 的消费请求。
- eureka-client:作为 application client,它需要从 Eureka Server 获取 application service 的地址,然后访问 application service。
如何运行例子
我们需要按照顺序运行它们。
eureka-server
eureka-server 使用 jersey 作 Web 框架(jersey 和 struts2、springMVC 作用差不多,没接触过也不碍事),项目最终要打包成 war 包运行在 tomcat 上。项目的运行方法如下:
- 构建项目。使用
mvn clean package将项目打包成 eureka.war。 - 将 eureka.war 拷贝到 ${CATALINA_HOME}/webapps 目录下。
- 启动 tomcat。通过 http://127.0.0.1:8080/eureka/ 可以访问成功,这个时候,我们就可以使用 Eureka Client 往上面注册服务了。另外,我们可以看到,Eureka Server 将自己注册了上去(30s 内)。

补充一点,官方提供了基于 java 实现的 Eureka Client 来与 Eureka Server 进行交互,其实,我们也可以直接使用 rest 请求,例如,通过 http://127.0.0.1:8080/eureka/v2/apps 可以获取所有的服务列表。当我们的客户端不支持 java 时,这些接口将非常有用,具体接口可以参考官网。在项目中,我们查找包含javax.ws.rs.Path注解的类,也可以找到这些接口。
eureka-service
eureka-service 的实现比较简单,它先把自己注册到 Eureka Server,然后一直监听 application client 的消费,监听到后,只进行简单的交互后就直接关闭客户端。代码简化如下:
// 创建ApplicationInfoManager对象(用来注册、注销当前实例)
ApplicationInfoManager applicationInfoManager = new ApplicationInfoManager(
new MyDataCenterInstanceConfig(), new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get());
// 创建EurekaClient对象(用来获取其他服务以及提供内部入口用来注册、续约、和注销当前实例)
EurekaClient eurekaClient = new DiscoveryClient(applicationInfoManager, new DefaultEurekaClientConfig());
// 设置当前实例状态为STARTING
applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.STARTING);
// 设置当前实例状态为UP----》这个时候会向Eureka Server注册自己
applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.UP);
// 和application client交互
// ······
// 关闭客户端,同时也会注销当前实例
eurekaClient.shutdown();
操作方法很简单,只要运行ExampleEurekaService.main方法就行。当控制台出现"Service started and ready to process requests.."时,说明当前实例已经注册到 Eureka Server,并且准备被消费。

eureka-client
eureka-client 项目的具体逻辑为:从 Eureka Server 上获取到注册表,然后和 application service 交互,得到响应后直接关闭客户端。代码简化如下:
// 创建ApplicationInfoManager对象(用来注册、注销当前实例)
ApplicationInfoManager applicationInfoManager = new ApplicationInfoManager(
new MyDataCenterInstanceConfig(), new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get());
// 创建EurekaClient对象(用来获取其他服务以及提供内部入口用来注册、续约、和注销当前实例)
EurekaClient eurekaClient = new DiscoveryClient(applicationInfoManager, new DefaultEurekaClientConfig());
// 获取指定服务的实例对象
InstanceInfo nextServerInfo = eurekaClient.getNextServerFromEureka(vipAddress, false);
// 和application service交互
// ······
// 关闭客户端
eurekaClient.shutdown();
直接运行ExampleEurekaClient.main就行。我们可以从控制台看到整个过程。

以上,通过一个简单的例子,我们实现了将服务注册到 Eureka Server 以及正常地消费它。这是非常“入门级”的例子,下篇博客我们再深入研究各种配置参数的作用。
最后,感谢阅读。
参考资料
https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
本文为原创文章,转载请附上原文出处链接:https://www.cnblogs.com/ZhangZiSheng001/p/14337985.html
Eureka详解系列(二)--如何使用Eureka(原生API,无Spring)的更多相关文章
- Eureka详解系列(四)--Eureka Client部分的源码和配置
简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...
- Eureka详解系列(五)--Eureka Server部分的源码和配置
简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- Eureka详解系列(一)--先谈谈负载均衡器
这个系列开始研究 Eureka,在此之前,先来谈谈负载均衡器. 本质上,Eureka 就是一个负载均衡器,可能有的人会说,它是一个服务注册中心,用来注册服务的,这种说法不能说错,只是有点片面. 在这篇 ...
- Eureka详解系列(三)--探索Eureka强大的配置体系
简介 通过前面的两篇博客,我们知道了:什么是 Eureka?为什么使用 Eureka?如何适用 Eureka?今天,我们开始来研究 Eureka 的源码,先从配置部分的源码开始看,其他部分后面再补充. ...
- Java源码详解系列(十二)--Eureka的使用和源码
eureka 是由 Netflix 团队开发的针对中间层服务的负载均衡器,在微服务项目中被广泛使用.相比 SLB.ALB 等负载均衡器,eureka 的服务注册是无状态的,扩展起来非常方便. 在这个系 ...
- Mybatis源码详解系列(四)--你不知道的Mybatis用法和细节
简介 这是 Mybatis 系列博客的第四篇,我本来打算详细讲解 mybatis 的配置.映射器.动态 sql 等,但Mybatis官方中文文档对这部分内容的介绍已经足够详细了,有需要的可以直接参考. ...
- Java源码详解系列(十)--全面分析mybatis的使用、源码和代码生成器(总计5篇博客)
简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...
- 微服务之SpringCloud实战(五):SpringCloud Eureka详解
Eureka详解 在第三节高可用中,实际已经讲解了服务的注册,只不过注册的是Eureka本身,原理相同,通过这几篇文章我相信大家对Eureka有了一定的了解,三个核心角色:服务注册中心.服务提供者和服 ...
随机推荐
- 让你轻松掌握 Python 中的 Hook 钩子函数
1. 什么是Hook 经常会听到钩子函数(hook function)这个概念,最近在看目标检测开源框架mmdetection,里面也出现大量Hook的编程方式,那到底什么是hook?hook的作用是 ...
- CODING DevOps 线下沙龙回顾二:SDK 测试最佳实践
讲师:潘志刚 声网质量效能部门负责人,超过 14 年服务器.移动终端.音视频编解码以及汽车电子等跨行业从业经历,负责建立测试基础架构和自动化测试方案,主持搭建持续集成测试生态体系.现任声网质量效能部门 ...
- 其实吧,LRU也就那么回事。
这是why哥的第 81 篇原创文章 你面试的时候遇见过LRU吗? LRU 算法,全称是Least Recently Used. 翻译过来就是最近最少使用算法. 这个算法的思想就是:如果一个数据在最近一 ...
- 高端面试必备:一个Java对象占用多大内存
这个问题一般会出现在稍微高端一点的 Java 面试环节.要求面试者不仅对 Java 基础知识熟悉,更重要的是要了解内存模型. Java 对象模型 HotSpot JVM 使用名为 oops (Ordi ...
- Mybatis 动态sql if 判读条件等于一个数字
在Mybatis中 mapper中 boolean updateRegisterCompanyFlag(@Param(value = "companyId") String com ...
- Ubuntu安装最新的SlickEdit软件--破解教程
最近主要工作系统转到LInux上面来了,Slickedit的安装破解也费了些事,今天将过程整理一下做个记录. 说明:SlickEdit pro V21.03 Linux 64位实测可用,MAC实测可用 ...
- 什么是Cassandra数据库
在本文中,我们将介绍Cassandra名字的含义.Cassandra的发展简史.Cassandra这项技术的特点及优势,以及对于这项技术的未来展望. 本文将用浅显易懂的方式,帮助您将对Cassandr ...
- centos7安装手册
一:centos7下载 下载centos可以访问阿里云完成centos 7.7下载(建议使用迅雷下载):http://mirrors.aliyun.com/centos/7.9.2009/isos/x ...
- 自动化运维工具-Ansible之2-ad-hoc
自动化运维工具-Ansible之2-ad-hoc 目录 自动化运维工具-Ansible之2-ad-hoc Ansible ad-hoc Ansible命令模块 Ansible软件管理模块 Ansibl ...
- CentOS 7 最小化安装及优化
CentOS 7 最小化安装及优化 目录 CentOS 7 最小化安装及优化 一.下载镜像文件 官方网站 国内镜像源 一.VMware 配置虚拟网络 二.VMware 新建虚拟机 三.CentOS 7 ...