10分钟学会 Spring Cloud 微服务

概览:

通读本微博你可以学会Spring Cloud 下属的:

Eureka: 服务注册发现, 治理
Feign: 一个整合 Hystrix(服务熔断) 和 Ribbon(客户端负载均衡)的架构
Zuul: 路由网关
config: 远程动态配置
Bus: 消息总线, 用于通知 config 的变更
Sleuth: 服务跟踪

搭建 Eureka

访问http://start.spring.io/可以快速生成项目, 以 Maven 为例, 添加如下依赖:

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

    <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>Brixton.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

添加配置application.properties:

server.port=1001

eureka.instance.hostname=eureka.domain.com
eureka.instance.next.server.port=1002
eureka.client.serverUrl.defaultZone=http://${eureka.instance.hostname}:${eureka.instance.next.server.port}/eureka

然后在启动主类上开启服务:

@EnableEurekaServer
@SpringBootApplication
public class TestApplication {

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

然后再启动一个一样的 eureka 注册中心, 作为集群, 配置都一样, 只是 properties 改变一些

// 注意交换了2个端口号
server.port=1002

eureka.instance.hostname=eureka.domain.com
eureka.instance.next.server.port=1001
eureka.client.serverUrl.defaultZone=http://${eureka.instance.hostname}:${eureka.instance.next.server.port}/eureka

 

然后就可以打开 http://eureka.domain.com:1001/或者http://eureka.domain.com:1002/, 就看到服务注册的管理页面啦.

接下来, 做一个 serverA-1:

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>Brixton.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}
spring.application.name=serverA
eureka.client.serverUrl.defaultZone=http://eureka.domain.com:1001/eureka/,http://eureka.domain.com:1002/eureka/

再次启动一个一模一样配置的 serverA 即可做集群

整合 Feign

像上面 serverA 一样, 启动一个 serverB, 添加 Feign 依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

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

创建一个调用serverA的接口即可

// serverA 中必须有一个/hello 的映射 API
@FeignClient("serverA")
public interface ServerAService {
    @RequestMapping("/hello", method = RequestMethod.GET)
    String hello(@RequestParam String id);
}

API 网关 Zuul

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

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Brixton.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
@EnableZuulProxy
@SpringBootApplication
public class TestApplication {

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

再次向 eureka注册, 然后添加网关配置

zuul.routes.service-a.path=/service-a/**
// Eureka 中心注册的服务名称
zuul.routes.service-a.url=server-A

动态配置 Config和 Bus

待续…

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to Top