Spring Boot和Spring Cloud

    科技2022-07-20  117

    一、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 # eureka实例的主机名 client: register-with-eureka: false #不把自己注册到eureka上 fetch-registry: false # 不从eureka上获取服务器的注册信息 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 # 注册服务的时候使用服务的ip地址 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 # 注册服务的时候使用服务的ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/

    4.启动

    负载均衡生效

    Processed: 0.017, SQL: 8