1.1. 一、注册中心服务端。

官方文档

1.1.1. 新建一个Eureka服务注册中心。

和创建springboot项目一样,创建一个springboot项目项目。如下图:

只需要把Eureka Server选上,把依赖加入即可。

1.1.2. 分析pom文件。

创建好项目之后,pom.xml文件中比普通的springboot项目,多了4个:

  • spring-cloud的版本管理。
    <properties>
      <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
    </properties>
    
  • spring-cloud依赖管理。
    <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-dependencies</artifactId>
              <version>${spring-cloud.version}</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    
  • 从spring-cloud中加入eureka-server。
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
  • 添加仓库。

    <repositories>
      <repository>
          <id>spring-milestones</id>
          <name>Spring Milestones</name>
          <url>https://repo.spring.io/milestone</url>
      </repository>
    </repositories>
    

    所以普通的springboot项目,想改造为eureka注册中心。只要加上上面的配置即可。

    1.1.3. 启用注册中心。

    使用@EnableEurekaServer启用注册中心。
    ```java @SpringBootApplication @EnableEurekaServer public class EurekaRegisterCenterApplication {

    public static void main(String[] args) {

      SpringApplication.run(EurekaRegisterCenterApplication.class, args);
    

    }

}

### 配置注册中心。  
`application.yml` 中配置如下:  
```yaml
server:
  # tomcat 服务端口
  port: 9999
eureka:
  client:
    #使用@EnableEurekaServer后,默认会把自己作为一个客户端和服务注册中心。把自己注册到“注册中心”。
    #值为false意味着自身仅作为服务器,不作为客户端
    register-with-eureka: false
    #值为false意味着无需注册自身
    fetch-registry: false
    # 注册中心的地址,注册中心监控页面上会用到
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/
  #logging.level.com.netflix.eureka=OFF
  #logging.level.com.netflix.discovery=OFF
spring:
  application:
    name: my-eureka-register-center

1.2. 二、搭建普通微服务,注册到注册中心。

1.2.1. 加入依赖

新建一个简单的springboot服务,加入eureka-client 依赖。

<properties>
    <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

1.2.2. 启用客户端

之前的版本需要使用 @EnableDiscoveryClient启用eureka,把这个服务向eureka注册。现在不需要这个。

//之前的版本需要 @EnableDiscoveryClient
@SpringBootApplication
public class UserConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserConsumerApplication.class, args);
    }

}

1.2.3. 配置微服务

server:
  port: 9090
spring:
  application:
    name: user-consumer
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/user-consumer?serverTimezone=GMT%2b8
    username: root
    password: 123456
eureka:
  client:
    serviceUrl:
      # 注册中心的地址
      defaultZone: http://localhost:9999/eureka/

1.2.4. 添加测试代码。

@RestController
public class UserController {

    @GetMapping("/hello")
    public String sayHello() {
        return "hello from user_provider";
    }
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/service-instances/{applicationName}")
    public List<ServiceInstance> serviceInstancesByApplicationName(
            @PathVariable String applicationName) {
        return this.discoveryClient.getInstances(applicationName);
    }

}

1.3. 三、测试效果。

1.3.1. 查看注册中心

分别启动注册中心eureka-register-center,微服务user-consumer。 访问注册中心http://localhost:9999/可以看到效果如下:

user-consumer服务注册到了eureka 注册中心上了。

1.3.2. 访问服务。

可以看到Status下面的服务实例KXPIR1TCDAFMGVY:user-consumer:9090, 其中KXPIR1TCDAFMGVY是hostname就是我的主机名字。如下:

如果要请求/hello 有2种方式:

  • 通过注册中心实例id访问。请求http://kxpir1tcdafmgvy:9090/hello就是通过注册中心访问。
  • 直接访问。请求 http://localhost:9090/hello

    1.3.3. 同一个服务运行多个实例

    改一下user-consumer服务的端口,再启动一个user-consumer服务。可以看到eureka中注册了2个user-consumer服务的实例。

    可以看出各个服务注册到eureka,是以spring.application.name区分是不是同一个服务的。

1.4. 四、使用IP地址调用服务。

eureka的client注册到server时默认是使用hostname而不是ip,例如上面的KXPIR1TCDAFMGVY:user-consumer:9090。这就导致client在多台机器时,服务间相互调用时也会使用hostname进行调用,从而调用失败。 这时候就需要使用ip来服务到eureka-server上,需要在eureka的client增加配置如下:

eureka.instance.preferIpAddress=true
eureka.instance.instanceId=${spring.cloud.client.ip-address}:${server.port}
  • client端设置eureka.instance.preferIpAddress=true

    如图所示,Status 下面服务的连接地址会改变为ip+端口。原来是主机名+端口
  • client端设置eureka.instance.instanceId=${spring.cloud.client.ip-address}:${server.port}

    如图所示,把Status 下面服务的显示改为ip+端口。 这里版本不同还有些不一样。 springcloud2.0之前是${spring.cloud.client.ipAddress}

1.5. 参考文档:

https://mp.weixin.qq.com/s/4-JLI3QvwFQgJ_gEFI_51w
http://www.itmuch.com/spring-cloud/finchley-5/
http://blog.didispace.com/spring-cloud-starter-dalston-1/

results matching ""

    No results matching ""