springcluoud入门
概念:
Spring Cloud是一个分布式的整体解决方案。
Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。
SpringCloud分布式开发五大常用组件:
- 服务发现——Netflix Eureka(注册中心)
- 客服端负载均衡——Netflix Ribbon (具体调用)
- 断路器——Netflix Hystrix (当流程中某一服务出问题时可以快速响应失败)
- 服务网关——Netflix Zuul (流程中过滤请求)
- 分布式配置——Spring Cloud Config (配置)
项目流程:
首先,新建一个空项目springcloud
- 创建注册中心
-
配置Eureka信息
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/
-
@EnableEurekaServer
启动类: @EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
- 启动主注册中心主程序
-
- 创建provider提供者
-
配置Eureka提供者信息
server: #port: 8001 port: 8002 spring: application: name: provider-ticket eureka: instance: prefer-ip-address: true #注册服务的时候使用服务的ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/
- 编写被调用的controller和service
controller: @RestController public class TicketController { @Autowired TicketService ticketService; @GetMapping("/ticket") public String getTicket(){ return ticketService.getTicket(); } } service: @Service public class TicketService { public String getTicket(){ //System.out.println("8001"); System.out.println("8002"); return "《拿到票了》"; } }
- 分别打包 8001 ,8002 成jar包,并分别用cmd命令运行 java -jar provider-ticket-0.0.1-SNAPSHOT-8001T.jar / java -jar provider-ticket-0.0.1-SNAPSHOT-8002T.jar,此时http://localhost:8761/注册中心下会看到同一个应用的两个实例
-
- 创建consumer-user消费者
-
配置Eureka消费者信息
spring: application: name: consumer-user server: port: 8200 eureka: instance: prefer-ip-address: true #注册服务的时候使用服务的ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/
- 创建请求
-
开启发现服务功能并启动主程序,负载均衡可以使实例被调用时轮流调用
- 程序启动后,此时注册中心可以查看到,通过url:http://localhost:8200/buy?name=zhangsanfeng 刷新 可以测试负载均衡
-