Spring Cloud 服務註冊和發現
Spring Cloud 服務註冊和發現
搭建服務註冊中心
匯入maven依賴
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.19.BUILD-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>Edgware.BUILD-SNAPSHOT</spring-cloud.version> </properties><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <properties> <java.version>1.8</java.version> <spring-cloud.version>Edgware.BUILD-SNAPSHOT</spring-cloud.version> </properties><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <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>
可通過Spring Initializr選擇Eureka Server模組生成,要注意下SpringBoot的版本,不同的版本對應不同的Spring Cloud版本,我這裡用的是1.5.19。
修改配置檔案
server.port=1111
eureka.instance.hostname=localhost
#關閉向註冊中心註冊
eureka.client.register-with-eureka=false
#關閉從註冊中心獲取例項
eureka.client.fetch-registry=false
由於本身就是服務端,所以不需要向註冊中心註冊自己本身,服務端的只要職責是維護服務例項,所以也不需要獲取服務例項
修改啟動類
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
匯入依賴後,只需要在啟動上面加上**@EnableEurekaServer**註解就可以了
啟動
直接啟動應用,然後訪問http://localhost:1111/就能看到註冊中心的介面
此時可以看到例項列表是沒有例項的,接下來我們註冊一個客戶端上去
搭建Eureka客戶端
匯入maven依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
修改配置檔案
spring.application.name=consumer
server.port=1112
#指定註冊中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
這裡只需要指定註冊中心的地址就可以了
修改啟動類
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
這裡只需要加上**@EnableDiscoveryClient**註解就可以了
啟動
啟動Eureka客戶端後,我們再次檢視註冊中心就能發現我們的客戶端例項註冊上去了
Eureka Server增加安全使用者認證
在使用Eureka Server的時候,我們直接訪問註冊中心的頁面就能看到所有的例項資訊,在生產環境這樣肯定是不安全的,不僅如此,我們把Eureka Client註冊上去也不需要認證,使用者只要知道地址就能達到把自己的服務偽裝成同名服務註冊上去,這也是很不安全的,Erueka Server對此提供了安全使用者認證。
增加maven依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
配置訪問使用者名稱和密碼
properties
#新增HTTP basic基本驗證
security:
basic:
enabled: true
user:
name: dailn
password: dailn!123
首先我們需要開啟安全校驗,然後配置使用者名稱和密碼
訪問註冊中心管理頁面
可以看到,這裡就需要校驗使用者和密碼了,只有校驗通過才能訪問註冊中心管理頁面
客戶端再次註冊
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
增加了安全認證後,客戶端就註冊不上去了,此時我們需要在客戶端註冊的時候也加上安全認證
eureka.client.security.basic.user=dailn
eureka.client.security.basic.password=dailn!123
eureka.client.serviceUrl.defaultZone=http://${eureka.client.security.basic.user}:${eureka.client.security.basic.password}@localhost:1111/eureka/
重新啟動就能註冊成功,在註冊中心管理介面也能看到例項了
總結
這一篇文章我們簡單的學習下服務的註冊和發現,只需要匯入相關的依賴,修改配置檔案和啟動類就可以了,最後為了安全起見還給Erureka Server增加了安全認證,下一篇文章在介紹服務端如何實現高可用。