搭建完环境后我们就可以正式开始微服务的开发,首先创建一个module并将其作为eureka server来运行.eureka server扮演了注册中心的角色,同时它也支持集群部署来提高注册中心的稳定性. 首先我们使用单体eureka server来提供服务,然后演示集群形式
单体Eureka Server
创建单体eureka的过程很简单,大体上分为四步:
-
建module. 创建一个maven module,假设我们将其命名为
cloud-eureka-server7001. 7001表示端口号,因为我是在自己的电脑上演示,为了演示方便,我是用不同端口号来表示不同的服务. -
写pom 添加spring boot 及eureka server相关依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
- 改yml 所谓改yml就是修改module的配置文件, 这里采用yml的形式. 具体如下:
server:
port: 7001
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:7001/eureka
首先通过port指定服务的端口号,然后是eureka server的声明. 因为该服务本身就提供服务注册功能,所以无需再注册,所以设置register-with-eureka为false, 同时它也不作为服务提供者或消费者,所以也无需拉取注册信息,所以fetch-registry 也为false. 最后通过defaultZone指定注册地址
- 主启动
添加启动类,并将其声明为eureka server. 所谓启动类就是创建一个含有main方法的类,然后将其标记为
SpringBootApplication,比如
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class,args);
}
}
这样你就可以运行该类来启动注册中心. 如果一切正常,你打开 http://localhost:7001 应该能看到该服务的相关信息.
集群Eureka server
单体的注册中心固然不够稳定,所以我们可以创建集群.创建集群的步骤跟单体一样,只是有些配置需要注意一下. 具体如下:
-
建module 创建一个maven module cloud-eureka-server7002,注意这次我们需要换一个端口号,比如7002.
-
写pom 跟单体的依赖完全一样.
-
改yml 这里跟单体有些不同,因为我们要搭建eureka server集群,所以需要它们互相注册,组成集群. 所谓互相注册,就是把
defaultZone改成其他server的url. 比如我有三个 server 服务A,B,C. 那么A的defaultZone就是B,C的地址,B的defaultZone就是A,C的地址,C同理.
所以此时我们要同时修改这两个server的defaultZone,让它们互相注册.具体如下: server7001
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka7002.com:7002/eureka
server7002
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka
上面我们可以看到7001 server的defaultZone指向7002,7002的server指向7001. 另外需要说明的是我们的hostname 不再是localhost而是改成了各自的端口为后缀的命名. 这主要是因为当服务多的时候我们好区分,而不是都显示localhost. 你可以通过修改hosts来将localhost映射到你自己的名字,具体操作如下:
打开 c:\windows\system32\drivers\etc\hosts 文件. 然后添加如下映射
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
4 主启动 与单体一样,添加两个标记,具体如下:
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7002 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7002.class,args);
}
}
这样当你启动两个server时,应该能看到它们分别包含了对方的服务