springcloud服務註冊與發現(二)
服務註冊中心 :eureka-server
新建一個springboot項目:eureka-server,其pom.xml配置如下
<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.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
想要實現一個服務註冊中心的功能非常簡單,只需要在項目的啟動類EurekaServerApplication上使用@EnableEurekaServer註解即可
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication{ public static void main(String[] args) { new SpringApplicationBuilder(EurekaServerApplication.class) .web(true).run(args); } }
默認情況下,該服務註冊中心也會將自己作為客戶端來嘗試註冊它自己,所以我們需要禁用它的客戶端註冊行為,只需要在application.properties配置文件中增加如下信息:
spring.application.name=eureka-server
server.port=1001
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
啟動EurekaServerApplication,訪問 http://localhost:9001/可以看到Eureka的頁面。
服務提供方 :eureka-client
每一個實例註冊之後需要向註冊中心發送心跳,當client向server註冊時,它會提供一些元數據,例如主機和端口,URL,主頁等。Eureka server 從每個client實例接收心跳消息。 如果心跳超時,則通常將該實例從註冊server中刪除。
新建一個springboot項目:eureka-client,其pom.xml配置如下:
<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.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</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>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
想要實現一個服務提供方也很簡單,只要在項目的啟動類EurekaClientApplication上使用@EnableEurekaClient註解即可
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(
EurekaClientApplication.class)
.web(true).run(args);
}
}
在application.properties中進行如下配置感興趣的可以朋友企鵝二零四二八四九二三七
spring.application.name=eureka-client
server.port=9002
eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/
啟動EurekaClientApplication類
刷新 http://localhost:9001/,可以看到咱們的服務提供方已經註冊到了服務註冊中心
新建一個DiscoveryController 使用discoveryClient.getServices()獲取已經註冊的服務名,使用@value將配置文件中的信息賦值到ip
@RestController
public class DiscoveryController {
@Autowired
private DiscoveryClient discoveryClient;
@Value("${server.port}")
private String ip;
@GetMapping("/client")
public String client() {
String services = "Services: " + discoveryClient.getServices()+" ip :"+ip;
System.out.println(services);
return services;
}
}
訪問:http://localhost:9002/client
最後說明一下@EnableEurekaClient 與@EnableDiscoveryClient這兩個註解
首先這個兩個註解都可以實現服務發現的功能,在spring cloud中discovery service有許多種實現(eureka、consul、 zookeeper等等)
@EnableEurekaClient基於spring-cloud-netflix。服務采用eureka作為註冊中心,使用場景較為單一。
@EnableDiscoveryClient基於spring-cloud-commons。服務采用其他註冊中心。
springcloud服務註冊與發現(二)