spring-cloud(2)、注册中心 — Eureka

  今天说Spring-Cloud里面的重要组件——注册中心,也就是Eureka。注册中心Euraka分服务端和客户端,其主要的目的是保存并监控各个微服务,当客户端需要调用服务实例时,服务实例的来源是从注册中心获取的,这点上像Dubbo。下面就分别来说搭建注册中心服务端,和客户端的使用。

  • 注册中心服务端

  首先,新建Module(registe-center),修改POM文件(父项目cloud-demo会在简介中写出来

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-demo</artifactId>
        <groupId>com.fzhsh.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.fzhsh.cloud</groupId>
    <artifactId>registe-center</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>
</project>

  然后,增加在src/main/resources目录下application.yml,并在文件中设置应用名称和Eureka的配置(注意,如果不配置会出现异常

server:
  port: 8888
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

  接着,编写启动代码

package com.fzhsh.cloud.registe;

@SpringBootApplication
@EnableEurekaServer
public class RegisteApp {

    public static void main(String[] args) {
        new SpringApplicationBuilder(RegisteApp.class).web(true).run(args);
    }
}

  最后,访问http://localhost:8888/,显示页面则启动成功

  • 注册中心客户端

  注册中心的客户端分两个部分,一个是向注册中心注册一个服务,另一个系统则是从注册中心获取已注册的服务的信息

  向注册中心注册服务

  首先,新建一个Module(server),修改POM文件内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-demo</artifactId>
        <groupId>com.fzhsh.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.fzhsh.cloud</groupId>
    <artifactId>server</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
    </dependencies>
</project>

  然后,同样在src/main/resources目录下增加application.yml,配置注册中心地址和应用名称,如下

server:
  port: 8000
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
spring:
  application:
    name: server

  最后,编写启动代码,使用@EnableEurekaClient将服务暴露给注册中心

package com.fzhsh.cloud.server;

@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServerApp {

    @RequestMapping("/home")
    public String hello(){
        return "test";
    }

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

  向注册中心获取服务信息

  首先,也新建Module(client),修改POM内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-demo</artifactId>
        <groupId>com.fzhsh.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.fzhsh.cloud</groupId>
    <artifactId>client</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
    </dependencies>
</project>

  然后,同样在src/main/resources下面增加application.yml,配置注册中心地址和应用名称

server:
  port: 8080
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
spring:
  application:
    name: client

  最后,编写获取信息接口代码

package com.fzhsh.cloud.clent;

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ClientApp {

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/show")
    public String getUrl(){
        List<ServiceInstance> list = discoveryClient.getInstances("server");
        if(list != null && !list.isEmpty()) {
            return list.get(0).getUri().toString();
        }
        return "no service info";
    }

    public static void main(String[] args) {
        SpringApplication.run(ClientApp.class, args);
    }
}
  • 最后测试

  按照顺序先后启动registe-center、server、client项目,然后访问http://localhost:8080/show,查看结果

http://sea-PC1606065:8000
  • 参考资料

http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#_spring_cloud_netflix

 

posted @ 2017-06-07 16:20  風之殤  阅读(135)  评论(0)    收藏  举报