一、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信息
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
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String
[] args
) {
SpringApplication
.run(EurekaServerApplication
.class, args
);
}
}
4.启动
② 编写服务提供者
1.项目结构
2.编写 service层 和 controller层
@Service
public class TicketService {
public String
getTicket(){
System
.out
.println("8001");
return "《姜子牙》";
}
}
@RestController
public class TicketController {
@Autowired
TicketService ticketService;
@GetMapping(value = "/ticket")
public String getTicket() {
return ticketService.getTicket();
}
}
3.配置信息
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模板
@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
@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.配置信息
spring:
application:
name: consumer
-user
server:
port: 8200
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http
://localhost
:8761/eureka/
4.启动
负载均衡生效