要使用Eureka實現服務發現,需要項目中包含Eureka的服務端發現組件以及客戶端發現組件。
搭建Maven父工程
創建一個Maven父工程xcservice-springcloud,並在工程的pom.xml中添加Spring Cloud的版本依賴等信息,如文件4-1所示。
文件4-1 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xc</groupId>
<artifactId>xcservice-springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!--Spring Boot的編譯插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
搭建服務端工程
在父工程xcservice-springcloud中,創建Maven子模塊xcservice-eureka-server作爲服務端工程,該模塊是一個基礎的Spring Boot工程,其主要文件代碼的實現過程如下。
(1)添加依賴。
在pom.xml中添加Eureka Server的依賴,如文件4-2所示。
文件4-2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.xc</groupId>
<artifactId>xcservice-springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.xc</groupId>
<artifactId>xcservice-eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>xcservice-eureka-server</name>
<description>服務端工程</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(2)編寫配置文件。
在配置文件中增加端口號等配置信息,如文件4-3所示。
文件4-3 application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#server:
#enable-self-preservation: false #關閉保護機制,以確保註冊中心可以將不可用的實例正確刪除
上述代碼中,首先配置了端口號爲8761,所有服務的實例都需要向此端口註冊。接下來配置了實例名爲localhost。由於本項目是一個註冊中心,是不需要向自己註冊和檢索服務的,所以register-with-eureka和fetch-registry都需要設置爲false。最後defaultZone中的地址是註冊中心的地址。
(3)修改服務端Java代碼。
在項目的引導類上添加註解@EnableEurekaServer,該註解用於聲明標註類是一個EurekaServer,如文件4-4所示。
文件4-4 EurekaApplication.java
package com.xc.xcserviceeurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* http://localhost:8761/
*/
@SpringBootApplication
@EnableEurekaServer
public class XcserviceEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(XcserviceEurekaServerApplication.class, args);
}
}
(4)啓動應用,查看信息。
完成上述配置後,啓動應用程序並在瀏覽器中訪問地址http://localhost:8761/即可看到Eureka的信息面板。
可以看出,Eureka Server的信息頁面已經成功顯示,但此時“Instances currently registered with Eureka”下的顯示信息爲“No instances available”,這表示該註冊中心還沒有註冊任何可用的實例。
在這裏給大家風向一波免費Java資源包括分佈式,微服務,併發,面試,Java架構師成長路線等等資源
加QQ:2995457287 或 vx:gupao-cola 免費獲取。
搭建客戶端工程
在父工程xcservice-springcloud中,創建Maven子模塊xcservice-eureka-user作爲客戶端工程,該模塊也是一個基礎的Spring Boot工程,其主要文件代碼的實現過程如下。
(1)添加依賴。在pom.xml中添加Eureka依賴,如文件4-5所示。
文件4-5 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.xc</groupId>
<artifactId>xcservice-springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.xc</groupId>
<artifactId>xcservice-eureka-user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>xcservice-eureka-user</name>
<description>客戶端工程</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(2)編寫配置文件。在配置文件中添加Eureka服務實例的端口號、服務端地址等信息,如文件4-6所示。
文件4-6 application.yml
server:
port:8000 # 指定該Eureka實例的端口號
eureka:
instance:
prefer-ip-address: true # 是否顯示主機的IP
#instance-id: ${spring.cloud.client.ipAddress}:${server.port} #將Status中的顯示內容也以“IP:端口號”的形式顯示
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # 指定Eureka服務端地址
spring:
application:
name: microservice-eureka-user # 指定應用名稱
(3)修改客戶端Java代碼。
在項目的引導類上添加註解@EnableEurekaClient,該註解用於聲明標註類是一個Eureka客戶端組件,如文件4-7所示。
文件4-7 Application.java
package com.xc.xcserviceeurekauser;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableEurekaClient
@RestController
public class XcserviceEurekaUserApplication {
@RequestMapping("/hello")
public String home() {
return "hello world!";
}
public static void main(String[] args) {
SpringApplication.run(XcserviceEurekaUserApplication.class, args);
}
}
(4)啓動應用,查看信息。
完成上述配置後,分別啓動服務器工程和客戶端工程,在瀏覽器中訪問地址http://local-host:8761/後,我們可以從Eureka的信息面板中看到註冊的服務信息,如圖4-5所示。
從圖4-5中可以看出,服務已經成功註冊到了註冊中心,註冊後的服務就可以直接被其他服務調用了。