上一篇文章我们讲解了Spring Cloud以及相关的一些概念,你也许会有些不解,没有关系,从本章开始,会逐一讲解。
Eurek包括两部分:Eurek Server和Eureka Client
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
加入相关依赖,spring Boot版本为2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom。这一系列文章全部采用这种模式,其他文章的pom跟这个pom一样。再次说明一下,以后不再重复引入。
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
4.0.0
com.brimen
spring-cloud-brimen-eureka
1.0-SNAPSHOT
spring-cloud-brimen-eureka
Spring Cloud 服务的注册与发现
pom
UTF-8
UTF-8
1.8
Finchley.RELEASE
spring-cloud-eureka
spring-cloud-provide
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
在该父工程下创建两个module工程,一个是Eurek Server(spring-cloud-eureka)工程,另一个是
Eurek Client(Eurek Client)工程,我们先来讲解如何创建Eurek Server。
创建一个普通的Spring Boot工程
其pom.xml继承了父pom文件,并引入spring-cloud-starter-netflix-eureka-server的依赖,代码如下:
4.0.0
com.brimen
spring-cloud-brimen-eureka
1.0-SNAPSHOT
com.brimen
spring-cloud-eureka
0.0.1-SNAPSHOT
spring-cloud-eureka
Spring Cloud Eureka 注册中心
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
配置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
代码如下:
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 ,可以看到如下界面
当client向server注册时候,会提供一些基本数据,比如说主机、端口、url和主页等信息。server将接收到每个client的心跳消息,如果心跳超时,通常会从server当中删除。
创建一个普通的Spring Boot的Module工程,并命名为:spring-cloud-provid
主要是引入关于“spring-cloud-starter-netflix-eureka-client”的依赖,代码如下:
4.0.0
com.brimen
spring-cloud-brimen-eureka
1.0-SNAPSHOT
com.brimen
spring-cloud-provide
0.0.1-SNAPSHOT
spring-cloud-provide
Spring Cloud Eurek 客户端,作为向Eurek Server注册的测试
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-maven-plugin
主要是指明注册服务的地址,代码如下:
server:
port: 8081
spring:
application:
name: spring-cloud-provide
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8080/eureka/
备注:需要指明 spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name
代码如下:
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;
}
}
依次启动spring-cloud-eureka和spring-cloud-client两个工程,并访问 http://localhost:8080,你会发现spring-cloud-client已经注册在了服务当中。