您的位置:首页 > 编程语言 > Java开发

SpringCloud系列教程(3)-- Eureka服务注册与发现

2018-01-08 17:00 956 查看

为什么要用Eureka

Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一。用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。

再微服务架构中,由于服务颗粒化,导致服务数量大增,服务间的调用变得非常平凡,假设我们现在有4个服务,A B C D ,在没有服务治理的时候,他们间相互调用呈现的是这样的:



每个服务都要相互约定调用格式、调用路径等等,导致系统越复杂,服务数量越多,调用越复杂,配置越复杂,这时候就需要服务治理组件来,简化调用流程,降低系统的复杂度,这个就是eureka的目的,而cloud很多组件因此也是以eureka为中心构建的(当然,很多组件也可以独立使用),使用了eureka后,服务间的调用则变成了:



服务间的调用都通过eureka来调度,同时服务上线自动注册到eureka上,便于让其他服务发现。

Eureka 入门

新建一个Eureka 服务端,cloud-eureka-server

(这里只列出POM文件,建立可以,通过教程1,操作选择eureka-server组件即可)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>

<groupId>com.cloud</groupId>
<artifactId>cloud-eureka-server</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>

<name>cloud-eureka-server</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<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>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>


配置application.properties

#注册实例名

spring.application.name=eureka-server

#访问端口

server.port=8081

eureka.instance.hostname=localhost

#指示此实例是否应将其信息注册到eureka服务器以供其他人发现。在某些情况下,您不希望发现实例,而您只想发现其他实例。

eureka.client.registerWithEureka=false

#指示该客户端是否应从eureka服务器获取eureka注册表信息

eureka.client.fetchRegistry=false

#注册地址

eureka.client.serviceUrl.defaultZone:http://localhost:8081/eureka/


CloudEurekaServerApplication 添加EnableEurekaServer 注解

@SpringBootApplication
@EnableEurekaServer
public class CloudEurekaServerApplication {

public static void main(String[] args) {
SpringApplication.run(CloudEurekaServerApplication.class, args);
}
}


启动项目,访问http://127.0.0.1:8081/,看到如下图,Eureka服务端便启动成功



新建cloud-eureka-client 服务,我们的目标是,自动注册Eureka中,然后能够通过Eureka来访问

同样,我们引入组件

<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>


配置客户端application.properties

spring.application.name=eureka-client
eureka.client.serviceUrl.defaultZone:http://localhost:8081/eureka/


CloudEurekaClientApplication 添加@EnableDiscoveryClient 注解

@EnableDiscoveryClient
@SpringBootApplication
public class CloudEurekaClientApplication {

public static void main(String[] args) {
SpringApplication.run(CloudEurekaClientApplication.class, args);
}
}


新建一个GlobalController,用来我们测试服务

```
@Controller
public class GlobalController {

@ResponseBody
@RequestMapping("/")
public String home() {
return "eureka-client hello world!";
}

@ResponseBody
@RequestMapping("/info")
public String info() {
return "欢迎 eureka-client 服务!";
}

}
```


启动cloud-eureka-client,发现服务已经注册,注册到了Eureka得服务器



点击链接,发现能够访问到服务页面



点击下载示例代码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐