上篇回忆:spring cloud的学习过程(二)
Spring cloud 实现服务注册及发现
服务注册与发现对于微服务系统来说非常重要。有了服务发现与注册,你就不需要整天改服务 调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务
-
cloud-eureka-server: eureka 注册服务器
-
cloud-simple-service:一个使用 mybatis的数据库应用,服务器
服务注册管理器原理如下图所示:
Spring cloud 的服务注册及发现,不仅仅只有 eureka,还支持 Zookeeper 和 Consul。默认情况下 是 eureka,spring 封装了 eureka,使其非常简单易用,只需要比传统应用增加一行代码就可以使用 了,这一行代码就是一个注解。我们按以下步骤实现服务注册和发现功能
1).首先需要建立eureka服务器
创建spring cloud eureka服务器和床架你之前那个配置文阿基服务器类似,你只需要创建一个空的maven工程,并引入spring boot的相关starter即可,然后创建一个近乎空的执行类,工程如下图:
在EurekaServer类中我们加入如下代码:
@SpringBootApplication
@EnableEurekaServer
@EnableEurekaServer
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class, args);
}
}
可以看到只需要使用@EnableEurekaServer 注解就可以让应用变为 Eureka服务器,这是因为 spring boot封装了 Eureka Server,让你可以嵌入到应用中直接使用。至于真正的 EurekaServer 是 Netflix公司的开源项目,也是可以单独下载使用的。
在 application.properties 配置文件中使用如下配置:
server.port=8761
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
其中 server.port配置 eureka服务器端口号。Eureka的配置属性都在开源项目 spring-cloudnetflix-master中定义(spring boot 连文档都没有,只能看源码了),在这个项目中有两个类 EurekaInstanceConfigBean 和 EurekaClientConfigBean,分别含有 eureka.instance 和 eureka.client相关 属性的解释和定义。从中可以看到,registerWithEureka 表示是否注册自身到 eureka 服务器,因为当 前这个应用就是 eureka服务器,没必要注册自身,所以这里是 false。fetchRegistry表示是否从 eureka服务器获取注册信息,同上,这里不需要。defaultZone 就比较重要了,是设置 eureka服务器 所在的地址,查询服务和注册服务都需要依赖这个地址。 做完这些后当然,还要改一下 pom文件,增加 eureka-server 的 starter 即可:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
如此 eureka服务器就完成了,在命令行启动就可以了。
2)让服务使用 eureka 服务器
让服务使用 eureka服务器,只需添加@EnableDiscoveryClient 注解就可以了。回到我们在上篇 文章中实现的 cloud-simple-service微服务应用。在 main 方法所在的 Application类中,添加 @EnableDiscoveryClient注解。然后在配置文件中添加: eureka.client.serviceUrl.defaultZone=http\://localhost\:8761/eureka/
spring.application.name=cloud-simple-service
其中 defaultZone是指定 eureka服务器的地址,无论是注册还是发现服务都需要这个地址。 application.name 是指定进行服务注册时该服务的名称。这个名称就是后面调用服务时的服务标识符 (这是服务发现的功能,我们在后面章节具体介绍)。当然,pom文件也需要增加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
如此以来该服务启动后会自动注册到 eureka服务器。如果在该服务中还需要调用别的服务,那 么直接使用那个服务的服务名称加方法名构成的 url即可,具体我们将在下章结合 ui端的应用具体介绍。