-
ASP.net教程之SpringBoot整合SpringCloud搭建分布式应用
什么是SpringCloud?
SpringCloud是一个分布式的整体解决方案。SpringCloud为开发者提供了在分布式系统中快速构建的工具,使用SpringCloud可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。
SpringCloud分布式开发五大常用组件
服务发现——Netflix Eureka
客户端负载均衡——Netflix Ribbon
断路器——NetFlix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config
创建一个分布式应用
1)New Project 选择 Empty Project
2)创建注册中心应用
2.1 New Model→Spring Initializr后面选择导入Cloud Discovery的Eureka Server依赖。
2.2 在启动类上加入@EnableEurekaServer注解。
2.3 创建application.yml,内容如下
server: port: 8761 eureka: instance: hostname: eureka-server # eureka实例的主机名 client: register-with-eureka: false #不将自己注册到eureka上 fetch-registry: false #不从eureka上来获取服务的注册信息 service-url: defaultZone: http://localhost:8761/eureka/
3)创建服务提供者工程
3.1 New Model→Spring Initializr后面选择导入Cloud Discovery的Eureka Discovery依赖。
3.2 创建一个Service
package com.example.providerticket.Service; import org.springframework.stereotype.Service; @Service public class TickerService { public String getTicker(){ return "《厉害了,我的国》"; } }
3.3 创建一个Controller
@RestController public class TickerController { @Autowired TickerService tickerService; @GetMapping("/ticket") public String getTicker(){ return tickerService.getTicker(); } }
3.4 创建配置application.yml
server: port: 8002 spring: application: name: provider-ticket eureka: instance: prefer-ip-address: true #注册服务的时候使用服务ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/
4)创建服务消费者工程
4.1 New Model→Spring Initializr后面选择导入Cloud Discovery的Eureka Discovery依赖。
4.2 配置启动类
@EnableDiscoveryClient //开启发现服务功能 @SpringBootApplication public class ConsumerUserApplication { public static void main(String[] args) { SpringApplication.run(ConsumerUserApplication.class, args); } @LoadBalanced //启用负载均衡机制 @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } }4.3 配置application.yml
spring: application: name: consumer-user server: port: 8200 eureka: instance: prefer-ip-address: true #注册服务的时候使用服务ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/
4.4 创建Controller并测试
@RestController public class UserController { @Autowired RestTemplate restTemplate; @GetMapping("/buy") public String byTicket(String name){ String forObject = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class); return name+"购买了"+forObject; } }至此,一个SpringBoot整合SpringCloud的简单分布式应用已搭建完毕。