Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致了锅炉板模式,并且使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。它们可以在任何分布式环境下工作,包括开发人员自己的笔记本电脑、裸机数据中心和云计算等托管平台。
但是毋庸置疑的是,springCloud带给我们的优势确实比劣势要大。所以,让我们走进springCloud的大门来深入了解一下它。
SpringCloud是一个分布式的系统,这就意味着我们需要考虑多个微服务之间调用的问题,比如URL接口调用,服务断开处理,地址发生变动问题等。我们如何处理这样的问题呢?
Eureka服务是一个开源的服务发现组件,本身是一个基于REST的服务。它包含了Server和Client两大部分。可集成再cloud中,实现微服务的注册和发现。
Eureka的两个组件:Eureka Server and Eureka Client.
Eureka Server提供服务发现能力,各个微服务启动时,会向Eureka server注册自己的信息(ip,端口,服务名称等)。
Eureka Client是一个java客户端,简化和Eureka Server的交互。
具体职责:
OK,通过对Eureka的说明,我们可以选择该组件进行搭建。
我使用的是IDEA开发工具,我们来创建Spring Cloud项目。首先我们创建一个maven项目,因为后面搭建的项目我都希望是同一个maven下的,便于后续管理。
IDEA通过File-->new-->project-->maven,点击next,点击next,点击finish。这个很简单就不多说了。
创建完maven项目之后,右键该项目,new-->Module, 选择Spring Initializr, SDK选择已经配置好的,点击next,名字自己命名,点击next,选择Spring Cloud Discovery后,勾选Eureka Server,点击next,点击finish。这样你就可以看到你的maven下有一个自己的module了。
这个时候让我们来看看module的pom文件中有一个依赖包:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
Eureka Server包已经导入,接下来我们要设置这个Module是Server。我们需要找到启动类,增加注解标注一个Eureka服务
@SpringBootApplication
@EnableEurekaServer //标注为一个eureka服务
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
ok,现在我们设置下配置文件application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
简单讲解下配置属性:
启动该项目,访问http://localhost:8761/,我们访问就可以看到这个注册中心了,现在是什么都木有。
至此,我们将server的搭建好了,接下来,开始搭建client。
相同的步骤,这个时候我们需要勾选Eureka discovery client, 不知和之前的server是一样的,我们就不重复了。
注意的是:@EnableDiscoveryClient 和 @EnableEurekaClient有什么区别呢?因为我们目前选择的是Eureka的组件,所以两者并没有任何的区别,但如果是非Eureka的组件,那使用后面的注解就说不通了,毕竟依赖包我们都没有,所以前者是适合各种组件,后者只适用于Eureka。
@SpringBootApplication
@EnableDiscoveryClient //声明一个Eureka Client
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
那我们client如何和server相关联呢?我们需要将client这个服务注册到server上,修改client默认配置文件。
eureka:
instance:
prefer-ip-address: true
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eurekaClientTest1
解释一下,eureka.instance.perfer-ip-address 表示是否将IP注册到Eureka Server;如果不匹配或者配置为false,那么注册到Server的名字便是操作系统的hostname。我们不妨来尝试一下。
那如何关联到Server,我们从配置文件中也能看到,eureka.client.serviceUrl.defaultZone配置的地址,便是我们之前创建Server的地址,这样就可以将Client的信息配置到Server上了。
分别启动Server和Client。
这里会有一个问题,如果按照这样的步骤进行操作的话,Client是注册不到Server上的。那如何才能成功注册呢,那需要再Client的pom文件中添加web模块:
org.springframework.boot
spring-boot-starter-web
为什么需要添加web模块,那是因为我们需要自动访问/调用Server的URL,所以Client需要是一个web模块的项目。
至此,我们Eureka的注册中心是搭建好了。接下来我们需要进行验证。
server:
port: 8761
eureka:
server:
enable-self-preservation: false
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/