上一篇文章我们讲解了Spring Cloud以及相关的一些概念,你也许会有些不解,没有关系,从本章开始,会逐一讲解。
Eurek包括两部分:Eurek Server和Eureka Client
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
1、创建服务注册中心(Eurek Server)
第一步:创建一个父工程
创建一个父工程(maven项目)
第二步:引入相关依赖
加入相关依赖,spring Boot版本为2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom。这一系列文章全部采用这种模式,其他文章的pom跟这个pom一样。再次说明一下,以后不再重复引入。
<?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">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.brimen</groupId>
<artifactId>spring-cloud-brimen-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<name>spring-cloud-brimen-eureka</name>
<description>Spring Cloud 服务的注册与发现</description>
<packaging>pom</packaging>
<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>Finchley.RELEASE</spring-cloud.version>
</properties>
<modules>
<module>spring-cloud-eureka</module>
<module>spring-cloud-provide</module>
</modules>
<dependencies>
<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>
第三步:创建module工程
在该父工程下创建两个module工程,一个是Eurek Server(spring-cloud-eureka)工程,另一个是
Eurek Client(Eurek Client)工程,我们先来讲解如何创建Eurek Server。
创建一个普通的Spring Boot工程
第四步:引入依赖
其pom.xml继承了父pom文件,并引入spring-cloud-starter-netflix-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>
<parent>
<groupId>com.brimen</groupId>
<artifactId>spring-cloud-brimen-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>com.brimen</groupId>
<artifactId>spring-cloud-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-eureka</name>
<description>Spring Cloud Eureka 注册中心</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
第五步:再配置文件当中进行配置
配置Eurek Server的注册中心,Eurek Server是一个高可用的组件,它没有缓存,每一个实例注册之后需要向注册中心发送心跳,在默认条件下,Eurek Server也是一个Eurek Client,它可以通过“registerWithEureka: false”来配置是否注册自己,配置如下:
server:
port: 8080
eureka:
instance:
#服务注册中心实例的主机名
hostname: localhost
client:
#是否向服务注册中心注册自己
registerWithEureka: false
#是否检索服务
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: server-eureka
第六步:在入口类需要添加一个注解@EnableEurekaServer
代码如下:
package com.brimen.servereureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class ServerEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(ServerEurekaApplication.class, args);
}
}
第七步:启动工程并访问
启动工程访问:http://localhost:8080 ,可以看到如下界面
2、创建一个服务提供者(spring-cloud-provide)
当client向server注册时候,会提供一些基本数据,比如说主机、端口、url和主页等信息。server将接收到每个client的心跳消息,如果心跳超时,通常会从server当中删除。
第一步:创建一个Spring Boot 的Module工程
创建一个普通的Spring Boot的Module工程,并命名为:spring-cloud-provid
第二步:引入相关依赖
主要是引入关于“spring-cloud-starter-netflix-eureka-client”的依赖,代码如下:
<?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>
<parent>
<groupId>com.brimen</groupId>
<artifactId>spring-cloud-brimen-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>com.brimen</groupId>
<artifactId>spring-cloud-provide</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-provide</name>
<description>Spring Cloud Eurek 客户端,作为向Eurek Server注册的测试</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第三步:在配置文件当中配置
主要是指明注册服务的地址,代码如下:
server:
port: 8081
spring:
application:
name: spring-cloud-provide
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8080/eureka/
备注:需要指明 spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name
第四步:在入口类添加@EnableEurekaClient注解
代码如下:
package com.brimen.springcloudprovide;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class SpringCloudProvideApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudProvideApplication.class, args);
}
}
第五步:创建一个对外提供的接口,用于测试
代码如下:
package com.brimen.springcloudprovide.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {
@Value("${server.port}")
String port;
@GetMapping("/gethello")
public String getHello(@RequestParam(value = "name",defaultValue = "brimen") String name){
return "Hi "+name+" I am from port:"+port;
}
}
3、启动并访问
依次启动spring-cloud-eureka和spring-cloud-client两个工程,并访问 http://localhost:8080,你会发现spring-cloud-client已经注册在了服务当中。