一、Spring Cloud
Spring Cloud 是一个分布式的整体解决方案。 Spring Cloud 为开发者提供了在分布式系统(配
置管理,服务发现,熔断,路由,微代理,控制总线,一次性 token,全局琐, leader 选举,分
布式 session,集群状态)中快速构建的工具,使用 Spring Cloud 的开发者可以快速的启动服务
或构建应用、同时能够快速和云平台资源进行对接。
SpringCloud 分布式开发五大常用组件
- 服务发现——Netflix Eureka
- 客服端负载均衡——Netflix Ribbon
- 断路器——Netflix Hystrix
- 服务网关——Netflix Zuul
- 分布式配置——Spring Cloud Config
二、微服务
Martin Fowler 微服务原文 https://martinfowler.com/articles/microservices.html
三、Spring Cloud 入门
项目结构:
先创建一个空项目来存放
① 编写 EurekaServer 注册中心
1. 项目结构
2.配置 Eureka 信息
1 2 3 4 5 6 7 8 9 10
| server: port: 8761 eureka: instance: hostname: eureka-server client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://localhost:8761/eureka/
|
3.@EnableEurekaServer
1 2 3 4 5 6 7 8 9
| @EnableEurekaServer @SpringBootApplication public class EurekaServerApplication {
public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }
}
|
4.启动
② 编写服务提供者
1.项目结构
2.编写 service 层 和 controller 层
1 2 3 4 5 6 7 8
| @Service public class TicketService {
public String getTicket(){ System.out.println("8001"); return "《姜子牙》"; } }
|
1 2 3 4 5 6 7 8 9 10
| @RestController public class TicketController { @Autowired TicketService ticketService;
@GetMapping(value = "/ticket") public String getTicket() { return ticketService.getTicket(); } }
|
3.配置信息
1 2 3 4 5 6 7 8 9 10 11 12
| server: port: 8001 spring: application: name: provider-ticket
eureka: instance: prefer-ip-address: true client: service-url: defaultZone: http://localhost:8761/eureka/
|
4.启动
去 Eureka 注册中心查看,http://localhost:8761/eureka/
5.负载均衡
为了显示效果,使用 Maven 仓库的打包,我复制一份提供者,改一下启动端口吗,防止冲突。
把包复制出来存放在文件夹里,并启动
8002 一样的方法启动即可
③ 编写服务消费者
1.项目结构
2.编写 controller 和 RestTemplate 模板
1 2 3 4 5 6 7 8 9 10 11 12
| @RestController public class UserController {
@Autowired RestTemplate restTemplate;
@GetMapping("/buy") public String buyTicket(String name){ String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticket",String.class); return name + "购买了" + s; } }
|
@EnableDiscoveryClient
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @EnableDiscoveryClient @SpringBootApplication public class ConsumerUserApplication {
public static void main(String[] args) { SpringApplication.run(ConsumerUserApplication.class, args); }
@LoadBalanced @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } }
|
3.配置信息
1 2 3 4 5 6 7 8 9 10 11 12
| spring: application: name: consumer-user server: port: 8200
eureka: instance: prefer-ip-address: true client: service-url: defaultZone: http://localhost:8761/eureka/
|
4.启动
整合完成!!!