Spring Cloud 之 Eureka集群搭建指南

版权声明:本文为博主原创文章。 https://blog.csdn.net/qq_36691683/article/details/82699082

简介

Eureka是Spring Cloud的服务管理模块,为业务组件的集群部署创造了条件。业务组件可以注册到Eureka容器中,Eureka负责维护这些服务的列表并自动检查他们的状态。

架构分析

这里写图片描述
本示例共3个项目,分别为eureka-server、eureka-provider、eureka-invoker。其中,eureka-server为服务注册中心,eureka-provider为服务提供者,eureka-invoker为服务调用者,用户访问服务调用者的9000端口间接调用服务提供者的服务。另外,为了简化模型,本例中服务调用者访问服务提供者时没有使用Feign框架,使用了RestTemplate。

1、构建服务器

创建名为eureka-server的maven项目,或者使用eclipse(idea)的Springboot生成器创建Springboot项目。pom.xml文件如下:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.16.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.SR4</spring-cloud.version>
    </properties>

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

    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

接下来,编写一个Springboot的启动类,并加上@EnableEurekaServer即可将此项目声明为Eureka服务器。启动类如下所示:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {

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

最后修改application.properties文件。

server.port: 8761
# 是否向Eureka服务器注册
eureka.client.register-with-eureka: false
# 是否抓取注册信息
eureka.client.fetch-registry: false

因为本例只有一台eureka服务器(可以是多台),所以register-with-eureka和fetch-registry这两项为false

2、编写服务提供者

创建名为eureka-provider的maven项目。pom.xml文件如下:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.16.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.SR4</spring-cloud.version>
    </properties>

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

    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

编写一个Controller,提供REST服务。代码如下:

@RestController
public class ProviderController {

    @RequestMapping("/hello/{name}")
    public String hello(@PathVariable("name") String name) {
        return "Hello," + name;
    }
}

编写Springboot启动器,需要加上@EnableEurekaClient注解声明该项目为eureka的客户端。代码如下:

@SpringBootApplication
@EnableEurekaClient
public class ProviderApplication {

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

最后修改application.properties文件。

spring.application.name=eureka-provider
#主机名
eureka.instance.hostname= localhost
#eureka服务器地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka

3、编写服务调用者

创建名为eureka-invoker的maven项目。pom.xml文件如下:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.16.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.SR4</spring-cloud.version>
    </properties>

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

    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

编写一个Controller,对外提供测试服务,并使用RestTemplate调用eureka-provider提供的服务。@LoadBalanced注解提供负载均衡的功能,此处不展开介绍。

@RestController
@Configuration
public class InvokerController {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

    @RequestMapping("/router")
    public String router() {
        String result = getRestTemplate().getForObject("http://eureka-provider/hello/kangkang", String.class);
        return result;
    }
}

编写Springboot启动器,需要加上@EnableDiscoveryClient注解声明有能力发现eureka中的服务。启动器代码如下:

@SpringBootApplication
@EnableDiscoveryClient
public class InvokerApplication {

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

最后修改application.properties文件。

server.port=9000
spring.application.name=eureka-invoker
#主机名
eureka.instance.hostname= localhost
#eureka服务器地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka

至此,Eureka集群已经搭建完毕。

测试

  1. 启动服务器eureka-server项目
  2. 启动服务提供者eureka-provider项目
  3. 启动服务调用者eureka-invoker项目
  4. 访问eureka提供的、含有集群节点信息的web页面,http://localhost:8761/
    这里写图片描述
  5. 访问服务调用者的测试接口,http://localhost:9000/router
    接口返回内容为:hello,kangkang,得到预期结果。

(完)

猜你喜欢

转载自blog.csdn.net/qq_36691683/article/details/82699082