SpringCloud-Eureka模块使用小记
之前不了解的时候,觉得微服务能带来什么好处呢。等自己稍微了解点。发现:真香。能带来很多好处,最显而易见的时候能够减少测试工作量。各个模块分开部署,互相影响小,一个模块有问题不会导致另一个模块不可用
SpringCloud包括微服务的一堆模块。最基础应用的两个模块是Eureka和Feign。这两个分别是服务治理(注册,发现各个服务模块)和服务调用(各个模块间的调用)。
这篇文章是介绍Eureka模块的使用的
1. 为什么要使用Eureka服务治理?
- 服务是什么:可以理解成应用,就是一个个单独的application。对外提供接口(这个接口不是指Interface,更强调controller里面对外提供的路径)
- 在实际应用中有很多服务。例如说编号0-9 是个服务,每个服务别都会调用另外9个服务。如果你要实现各个服务之间调用。就用0号举例:如果想用其他调用其他服务。自己必须要存储其他服务的实例。最简单的,需要存储其他编号1-9,9个实例的地址。如果有一天,某个服务地址换了。那么需要更新配置。 你看这个时候配置那么多。你还要实时关注配置的变化。会浪费运维人员的精力。
- 那么Eureka提供了什么功能:相当于所有的服务都在Eureka上注册,都是Eureka的客户端,每个服务不需要存储其他服务的实例地址了。只需要存储实例名字,如果需要就像Eureka服务咨询。即使服务地址变化了。各个服务只需要向Eureka服务端咨询咨询就好了。 有点像老旧的电话系统。Eureka就相当于与总线。我们拨打电话的时候只需告诉总线,我找谁,总线帮我们连通。
2. Eureka服务搭建demo
- 首先在父工程引入jar包 type和scope什么意思
因为cloud有很多模块,这个是为了指定各个不同模块的版本的。不能版本可能不能很好的兼容
<!--定义Spring Cloud的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- 新建Eureka服务(一个单独的application)。新建一个Springboot项目。
- 引入
spring-cloud-starter-netflix-eureka-server
包
- 引入
<dependencies>
<!--注册中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
- 配置端口号和服务名字,写在application.properties
#服务端口,随便,不要和其他端口冲突就好
server.port=10000
# 服务名 名字你自己取随便,不要和其他重复就好
spring.application.name=eureka-server
#是否将自己注册到Eureka服务器中,本身是服务器,无需注册
eureka.client.register-with-eureka=false
#是否从Eureka中获取注册信息。因为我本身就是服务器,我不消费。不需要获取其他
eureka.client.fetch-registry=false
#Eureka客户端与Eureka服务端进行通信的地址
eureka.client.service-url.defaultZone=http://127.0.0.1:${server.port}/eureka/
- 修改启动类,如果没有启动类需要自己新建Springboot启动类
如果有,加个注解就好了@EnableEurekaServer
package com.code.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @author dengtiantian
*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
启动(浏览器输入:http://localhost:10000
注意用你配置的端口号):看到下面的页面说明配置成功,Instances currently registered with Eureka显示的是在Eureka注册的服务。目前是没有的。下面我接着写客户端
Eureka分为客户端和服务端,服务端是一个单独的application,就是上面配置的。客户端就是其他我们微服务的各个服务。只需要添加注解和引入jar包就可以
- 配置Eureka客户端
- 在我们原来的服务(只是为了搭demo可以新建Springboot项目)里面添加jar包:spring-cloud-starter-netflix-eureka-client
<!--服务注册-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 添加配置(application.properties里面)
# 端口号
server.port=9003
# 服务名
spring.application.name=poi
#指定注册中心地址 注意这个地址要和server配置的地址匹配
eureka.client.service-url.defaultZone=http://127.0.0.1:10000/eureka/
#eureka服务器上获取的是服务器的ip地址,否则是主机名
eureka.instance.prefer-ip-address=true
- 启动类添加注解@EnableEurekaClient。
package com.code.poi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @author dengtiantian
*/
@SpringBootApplication
@EnableEurekaClient
public class PoiApplication {
public static void main(String[] args) {
SpringApplication.run(PoiApplication.class);
}
}
启动
在看上面Eureka打开的地址。会显示Instances currently registered with Eureka多了一个POI的服务。就是我们的服务
结束
3. 小结
- Eureka分为服务端和客户端。服务端是一个单独的application。用来监控注册在上面的服务是否存活(每30S一次心跳监测,如果连续3次发现某个服务非存活,就会移除这个服务)
- 客户端是注册在服务端的服务。可以通过服务端拿到其他客户端的实例地址。这样客户端不用自己存储其他客户端(服务)的实例。其实其他客户端实例地址变化。但是我不需要改什么。因为我使用的时候回想服务端获取
- 关于服务间通信,到时候再写一篇文章