2.2 Spring Cloud Eureka入门案例
下面来让我们体验一下Eureka的Hello World工程,这里需要用到的组件是Spring Cloud Netflix Eureka。
1.创建Maven父级pom工程
在父工程里面配置好工程需要的父级依赖,目的是为了方便管理与简化配置,如代码清单2-1所示。
代码清单2-1 ch2-1\pom.xml
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
2.创建Eureka Server工程
为避免赘述,在本章中,Eureka组件配置只展示一次,后续实战演练配置中心皆基于此。
配置Eureka Server工程的pom.xml文件,只需要添加spring-cloud-starter-netflix-eureka-server即可,注意F版和之前的版本有些变化,如代码清单2-2所示。
代码清单2-2 ch2-1\ch2-1-eureka-server\pom.xml
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
对于Eureka的启动主类,这里添加相应注解,作为程序的入口,如代码清单2-3所示。
代码清单2-3 ch2-1\ch2-1-eureka-server\src\main\java\cn\springcloud\book\Ch21Eureka-ServerApplication.java
@SpringBootApplication @EnableEurekaServer public class Ch21EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(Ch21EurekaServerApplication.class, args); } }
Eureka Server需要的配置文件,如代码清单2-4所示。
代码清单2-4 ch2-1\ch2-1-eureka-server\src\main\resources\application-standalone.yml
server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ server: waitTimeInMsWhenSyncEmpty: 0 enableSelfPreservation: false
这里的单机版配置,仅仅是为了演示,切勿用于生产。
3.创建Eureka Client组件工程
配置Eureka Client工程的pom.xml文件,只需要引入spring-cloud-starter-netflix-eureka-client即可,注意也与之前版本不一样,如代码清单2-5所示。
代码清单2-5 ch2-1\ch2-1-eureka-client \pom.xml
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies>
添加Eureka Client的启动主类,如代码清单2-6所示。
代码清单2-6 ch2-1\ch2-1-eureka-client\src\main\java\cn\springcloud\book \Ch21Eureka-ClientApplication.java
@SpringBootApplication @EnableDiscoveryClient public class Ch21EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(Ch21EurekaClientApplication.class, args); } }
Eureka Client的配置文件,如代码清单2-7所示。
代码清单2-7 ch2-1\ch2-1-eureka-client\src\main\resources\application-demo.yml
server: port: 8081 spring: application: name: demo-client1 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
这里需要说明一下,需要指定spring.application.name,不然会在Eureka Server界面显示为UNKNOWN。
4.效果展示
分别启动eureka-server及eureka-client,然后访问http://localhost:8761,结果如图2-2所示。
图2-2 eureka-server管理界面
通过访问Eureka Server的rest api接口,比如http://localhost:8761/eureka/apps,返回的结果如下:
<applications> <versions__delta>1</versions__delta> <apps__hashcode>UP_1_</apps__hashcode> <application> <name>DEMO-CLIENT1</name> <instance> <instanceId>10.2.238.223:demo-client1:8081</instanceId> <hostName>10.2.238.223</hostName> <app>DEMO-CLIENT1</app> <ipAddr>10.2.238.223</ipAddr> <status>UP</status> <overriddenstatus>UNKNOWN</overriddenstatus> <port enabled="true">8081</port> <securePort enabled="false">443</securePort> <countryId>1</countryId> <dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataC enterInfo"> <name>MyOwn</name> </dataCenterInfo> <leaseInfo> <renewalIntervalInSecs>30</renewalIntervalInSecs> <durationInSecs>90</durationInSecs> <registrationTimestamp>1529377552795</registrationTimestamp> <lastRenewalTimestamp>1529386376662</lastRenewalTimestamp> <evictionTimestamp>0</evictionTimestamp> <serviceUpTimestamp>1529377552795</serviceUpTimestamp> </leaseInfo> <metadata> <management.port>8081</management.port> </metadata> <homePageUrl>http://10.2.238.223:8081/</homePageUrl> <statusPageUrl>http://10.2.238.223:8081/actuator/info</statusPageUrl> <hea lthCheckUrl>http://10.2.238.223:8081/actuator/health</ healthCheckUrl> <vipAddress>demo-client1</vipAddress> <secureVipAddress>demo-client1</secureVipAddress> <isCoordinatingDiscoveryServer>false</isCoordinatingDiscoveryServer> <lastUpdatedTimestamp>1529377552795</lastUpdatedTimestamp> <lastDirtyTimestamp>1529377552665</lastDirtyTimestamp> <actionType>ADDED</actionType> </instance> </application> </applications>