Eureka Helloworld 简单入门事例以及遇到的问题。
Eureka Server:Eureka注册中心,具有服务发现和服务注册等功能
Application Service:将服务注册到Server,提供服务
Application Client:从注册中心中查找所需的服务,再请求调用具体提供服务的Service
Eureka Client 有两种: 提供服务的Application Service 和请求服务的Application Client
Eureka Server:点击下载后,部署在Tomcat中,启动Tomcat,成功启动后:
启动前按照官方推荐的方式,修改配置优化启动方式(这种方式不要用在生产环境)
eureka-client.properties拷贝到项目中作为Application Service的配置文件,eureka-server.properties作为Eureak Server的配置文件,按官方推荐修改:
# 取消这两个配置的注释 eureka.waitTimeInMsWhenSyncEmpty=0 eureka.numberRegistrySyncRetries=0
最后启动Tomcat.
项目中的eureka-client.properties 拷贝自 eureka-server.war包中.
源码地址:Eureka-Sample Source Code
注意,源码中的配置conf有两个配置文件:sample-eureka-service.properties + sample-eureka-client.properties,使用官方给出的示例代码不会自动读取这些配置,所以本例中的配置不使用此处的配置文件,只使用拷贝过来的eureka-client.properties;再者,github上的eureka项目构建使用 Gradle,本文用的是maven的依赖:
com.netflix.eureka eureka-client 1.8.0
源码中ExampleServiceBase + ExampleEurekaService作为Application Service,ExampleEurekaClient 作为 Application Client。其中 ExampleEurekaGovernatedService.java 可以不要,演示要ExampleEurekaService 已经足够了;后者是普通的启动方式,前者是在google/Guice IOC容器中启动,需要额外依赖Governated(netflix公司对Guice的封装)
运行前修改下配置文件:eureka-client.properties
eureka.region=default # 和eureka-server为同一个区,不用修改 eureka.name=sample # eureka此处修改为sample eureka.vipAddress=sample.mydomain.net # 修改虚拟地址, eureka.port=8001 # 修改为可用端口,8080已被eureka-server占用 eureka.preferSameZone=false eureka.shouldUseDns=false eureka.serviceUrl.default=http://localhost:8080/eureka/v2/ eureka.shouldOnDemandUpdateStatusChange=false
注意,eureka-client.properties 配置文件是用于Application Service连接的配置,即运行ExampleEurekaService时会自动读取该配置文件。
运行ExampleEurekaService,显示以下信息:
这里表示Applicaiton Service 正在连接Eureka-Server,由于Eureka自我保护模式,以及心跳周期长的原因(周期性心跳,默认时间为30秒),所以此处连接如没有其他问题,请持续等待;演示时一分钟后终于连接到了Eureka-Server,此时:
运行控制台此时打印出:Service started and ready to process requests…
此时,说明Application Service已经注册到了Eureka-server中,开始接受流量,提供服务。
Eureka中服务的注册和发现以域名为索引的访问形式,Client通过域名查找需要Server上的服务,所以在运行Applicaton Client(即ExampleEurekaClient这个类)时,需要指定所需服务的域名,如本例中,eureka-client.properties中配置了eureka.vipAddress=sample.mydomain.net,所以在ExampleEurekaClient中需要指定这个vipAddress:
而后,运行ExampleEurekaClient,如下:
按照官方代码,运行到这里,就开始一直等service的响应,细看下代码,发现:
而ExampleEurekaClient中的发送方式:
明显,readLine()没有读取到终止符,造成了前面一直在阻塞…….
修改下request的内容,加上终止符即可.
最后,本文简单演示Eureka的Helloworld示例,熟悉下Eureka的基本概念和运作方式;网上资料大多都是with Spring Cloud,官方文档对演示示例没有详细的描述,自己还是希望先熟悉各组件再慢慢将其组合使用,对整个框架整体思路会清晰很多。