概览:
通读本微博你可以学会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
待续…