Spring Cloud入門:服務註冊與服務發現
阿新 • • 發佈:2018-12-16
文章例項使用的Spring Cloud版本為Finchley.SR1,Spring Boot版本為2.0.4。
1 Spring Cloud Eureka(服務註冊與發現)
Spring Cloud Eureka 是Spring Cloud Netflix專案下的服務治理模組。服務治理是微服務架構中最為核心和基礎的模組,它主要使用者實現各個微服務例項的自動化註冊與發現。
服務註冊:在服務治理框架中,通常都會構建一個註冊中心,每個服務單元向註冊中心登記自己提供的服務,將主機與埠號、版本號、通訊協議等一些附加資訊告知註冊中心,註冊中心按服務名分類組織服務清單。
服務發現:服務之間的呼叫不再通過指定具體的例項地址來實現,而是通過向服務名發起請求呼叫實現。
Spring Cloud Eureka是一個使用了Netflix Eureka 來實現服務註冊與發現的模組。
2 搭建服務註冊中心eureka-server
2.1 新建Spring Boot專案,引入相關依賴
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version><!--注意:Spring Cloud 2.x是不支援Spring Boot1.x版本的--> <relativePath/> </parent> <properties> <project.build.sou1.rceEncoding>UTF-8</project.build.sou1.rceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <!--與Spring Cloud1.x區別,1.x使用的是spring-cloud-starter-eureka-server--> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2.2 使用@EnableEurekaServer註解啟動一個服務註冊中心提供給其他應用進行對話
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
2.3 application.properties新增配置
spring.application.name=eureka-server server.port=1001 #主機名 eureka.instance.hostname=localhost #不向註冊中心註冊自己 eureka.client.register-with-eureka=false #是否允許客戶端向Eureka 登錄檔獲取資訊 #由於註冊中心本身的職責是維護服務例項,所以並不需要去檢索服務 eureka.client.fetch-registry=false #指定服務註冊中心的位置 eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
2.4 啟動註冊中心
開啟http://localhost:1001/,可以看到
3 建立服務提供者eureka-client
3.1 建立Spring Boot專案,引入相關依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.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>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--專案監控模組-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<!--與Spring Cloud1.x區別,1.x使用的是spring-cloud-starter-eureka-->
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.2 使用@SpringCloudApplication註解,使能夠註冊到註冊中心並對外提供服務
該註解包含了@SpringBootApplication,@EnableDiscoveryClient,@EnableCircuitBreaker等其他註解
@SpringCloudApplication
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
3.3 application.properties新增配置
spring.application.name=eureka-client
server.port=2001
#專案資訊
info.name=${spring.application.name}
info.server.ip-address=${spring.cloud.client.ip-address}
info.server.port=${server.port}
#例項預設通過使用域名形式註冊到註冊中心:false
eureka.instance.prefer-ip-address=true
#例項名
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
#指定註冊中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
3.4 編寫介面
@RestController
public class HelloController {
@Autowired
DiscoveryClient discoveryClient;
@GetMapping("/hello")
public String hello() {
String services = "Services: " + discoveryClient.getServices();
System.out.println(services);
return "Hello,Spring Cloud";
}
}
3.5 啟動eureka-client
開啟註冊中心http://localhost:1001/,可以看到服務eureka-client已經成功註冊到了服務註冊中心: