微服务学习笔记(二)

230 阅读3分钟

搭建完环境后我们就可以正式开始微服务的开发,首先创建一个module并将其作为eureka server来运行.eureka server扮演了注册中心的角色,同时它也支持集群部署来提高注册中心的稳定性. 首先我们使用单体eureka server来提供服务,然后演示集群形式

单体Eureka Server

创建单体eureka的过程很简单,大体上分为四步:

  1. 建module. 创建一个maven module,假设我们将其命名为cloud-eureka-server7001. 7001表示端口号,因为我是在自己的电脑上演示,为了演示方便,我是用不同端口号来表示不同的服务.

  2. 写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>  
  1. 改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指定注册地址

  1. 主启动 添加启动类,并将其声明为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

单体的注册中心固然不够稳定,所以我们可以创建集群.创建集群的步骤跟单体一样,只是有些配置需要注意一下. 具体如下:

  1. 建module 创建一个maven module cloud-eureka-server7002,注意这次我们需要换一个端口号,比如7002.

  2. 写pom 跟单体的依赖完全一样.

  3. 改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时,应该能看到它们分别包含了对方的服务