本節主要講解如何使用 Eureka 編寫服務提供者。
1)創建項目註冊到 Eureka
註冊中心已經創建並且啓動好了,接下來我們實現將一個服務提供者 eureka-client-user-service 註冊到 Eureka 中,並提供一個接口給其他服務調用。
首先還是創建一個 Maven 項目,然後在 pom.xml 中增加相關依賴,代碼如下所示。
- <!-- Spring Boot -->
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.0.6.RELEASE</version>
- <relativePath />
- </parent>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <!-- eureka -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- </dependencies>
- <!-- Spring Cloud -->
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>Finchley.SR2</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
創建一個啓動類 App,代碼如下所示。
- @SpringBootApplication
- @EnableDiscoveryClient
- public class App {
- public static void main(String[] args) {
- SpringApplication.run(App.class, args);
- }
- }
啓動類的方法與之前沒有多大區別,只是註解換成 @EnableDiscoveryClient,表示當前服務是一個 Eureka 的客戶端。
接下來在 src/main/resources 下面創建一個 application.properties 屬性文件,增加下面的配置:
spring.application.name= eureka-client-user-service
server.port=8081
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
# 採用IP註冊
eureka.instance.preferIpAddress=true
# 定義實例ID格式
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
eureka.client.serviceUrl.defaultZone 的地址就是我們之前啓動的 Eureka 服務的地址,在啓動的時候需要將自身的信息註冊到 Eureka 中去。
執行 App 啓動服務,我們可以看到控制檯中有輸出註冊信息的日誌:
DiscoveryClient_EUREKA-CLIENT-USER-SERVICE/eureka-client-user-service:192.168.31.245:8081 - registration status: 204
我們可以進一步檢查服務是否註冊成功。回到之前打開的 Eureka 的 Web 控制檯,刷新頁面,就可以看到新註冊的服務信息了。
2)編寫提供接口
創建一個 Controller,提供一個接口給其他服務查詢,代碼如下所示。
- @RestController
- public class UserController {
- @GetMapping("/user/hello")
- public String hello() {
- return “hello”;
- }
- }
重啓服務,訪問 http://localhost:8081/user/hello (http://localhost%EF%BC%9A8081/user/hello),如果能看到我們返回的 Hello 字符串,就證明接口提供成功了。