1. 程式人生 > >Spring Cloud入門:服務註冊與服務發現

Spring Cloud入門:服務註冊與服務發現

文章例項使用的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已經成功註冊到了服務註冊中心:
服務註冊中心