Eureka Helloworld 简单入门事例以及遇到的问题

本文参照Eureka Github的演示Demo,在自己实践时,发现了官方的sample存在的一些问题(可能官方没更新),文档和网上的资料不多,无法详细获取到解决方案,只能自己倒腾出来,blog记录一下。
参照源码:Eureka-Sample Github
在看此文章前,希望你先阅读Eureka官方文档以了解一些基本概念。

Eureka 运行架构

High level architecture

Eureka Server:Eureka注册中心,具有服务发现和服务注册等功能
Application Service:将服务注册到Server,提供服务
Application Client:从注册中心中查找所需的服务,再请求调用具体提供服务的Service
Eureka Client 有两种: 提供服务的Application Service 和请求服务的Application Client

前期准备

Eureka Server:点击下载后,部署在Tomcat中,启动Tomcat,成功启动后:
eureka-server in 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的依赖:

<!-- https://mvnrepository.com/artifact/com.netflix.eureka/eureka-client -->
    <dependency>
        <groupId>com.netflix.eureka</groupId>
        <artifactId>eureka-client</artifactId>
        <version>1.8.0</version> <!-- 注意版本号 -->
    </dependency>

源码中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,显示以下信息:
service-console
这里表示Applicaiton Service 正在连接Eureka-Server,由于Eureka自我保护模式,以及心跳周期长的原因(周期性心跳,默认时间为30秒),所以此处连接如没有其他问题,请持续等待;演示时一分钟后终于连接到了Eureka-Server,此时:
eureka-connected
运行控制台此时打印出: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:
client-conf
而后,运行ExampleEurekaClient,如下:
client-send
按照官方代码,运行到这里,就开始一直等service的响应,细看下代码,发现:
client-blocking
而ExampleEurekaClient中的发送方式:
client-fixed
明显,readLine()没有读取到终止符,造成了前面一直在阻塞…….
修改下request的内容,加上终止符即可.


最后,本文简单演示Eureka的Helloworld示例,熟悉下Eureka的基本概念和运作方式;网上资料大多都是with Spring Cloud,官方文档对演示示例没有详细的描述,自己还是希望先熟悉各组件再慢慢将其组合使用,对整个框架整体思路会清晰很多。

猜你喜欢

转载自blog.csdn.net/a58yyxg/article/details/80193858
今日推荐