zoukankan      html  css  js  c++  java
  • 38、springboot——分布式之SpringCloud

    一、Spring Cloud简介

    Spring Cloud是一个分布式的整体解决方案。Spring Cloud 为开发者提供了在分布式系统
    (配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,
    分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启
    动服务或构建应用、同时能够快速和云平台资源进行对接。
    SpringCloud分布式开发五大常用组件
    服务发现——Netflix Eureka 
    客服端负载均衡——Netflix Ribbon 
    断路器——Netflix Hystrix 
    服务网关——Netflix Zuul 
    分布式配置——Spring Cloud Config
     

    二、测试springcloud

    一、创建3个项目分别作为注册中心,服务提供者,服务消费者

    我这为了方便测试,只是创建了一个空的项目,然后再分别创建3个模块

    1、新建空项目

     2、分别创建三个模块

    创建注册中心模块

    使用spring的初始化向导

     

    由于要做注册中心,所以我们选择Eureka Server模块

     接下下来再创建服务提供者和服务消费者模块

    创建模块步骤都是一样,唯独服务提供者和服务消费者创建时选择的模块是Eureka Discovery Client,而不是Eureka Server,另外加一个Web模块

    创建后的三个模块

     二、在注册中心(eureka-server模块)中配置eureka信息

     1、我这里用的是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/     #自己指定注册中心服务的地址

    注册中心默认的服务地址

     

      2、在启动器类中加@EnableEurekaServer注解启动Eureka注册中心的功能

    /**
     * 注册中心
     *  1、配置Euraka信息
     *  2、@EnableEurekaServer
     */
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }

    三、启动注册中心(eureka-server模块)服务查看效果

     启动服务之后控制台有打印

     之后我们访问http://localhost:8761/

     说明注册中心配置成功

    三、服务提供者(provide-ticket模块)提供服务

    1、创建service和controller

    TicketService代码

    import org.springframework.stereotype.Service;
    
    @Service
    public class TicketService {
        public String getTicket(){
            return "《我和我的祖国》";
        }
    }

    TicketController代码

    @RestController
    public class TicketController {
    
        @Autowired
        TicketService ticketService;
    
        @GetMapping("/ticket")
        public String getTicket(){
            return ticketService.getTicket();
        }
    }

    2、在application.yml中配置注册信息

    server:
      port: 8001
    spring:
      application:
        name: provide-ticket
    
    eureka:
      instance:
        prefer-ip-address: true     #注册的时候使用服务的ip地址
    
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/     #指定注册中心服务的地址

      服务的地址要和我们创建的注册中心的地址想对应

    3、启动项目,项目服务将会注册到注册中心里

    注意:我们的注册中心必须是一直启动着,这样才能注册进去

    启动着注册中心(eureka-server模块),然后启动服务提供者(provide-ticket模块)后;

    可以在注册中心页面中看到我们注册成功的服务

     四、服务消费者(consumer-user模块)调用服务

     1、consumer-user的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/     #指定注册中心服务的地址

    2、在启动器类中把RestTemplate注入容器并开启发现服务的注解

    @EnableDiscoveryClient      //开启发现服务功能
    @SpringBootApplication
    public class ConsumerUserApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerUserApplication.class, args);
        }
    
        @LoadBalanced       //使用负载均衡机制
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }

    通过RestTemplate进行访问远程服务

    @LoadBalanced:使用负载均衡机制稍后再说明

    3、编写一个controller进行调用远程服务

    @RestController
    public class UserController {
    
        @Autowired
        RestTemplate restTemplate;
    
        @GetMapping("/buy")
        public String buyTicket(String name){
            String s = restTemplate.getForObject("http://PROVIDE-TICKET/ticket", String.class);
            return name+"购买了"+s;
        }
    }

    restTemplate.getForObject("http://PROVIDE-TICKET/ticket", String.class)
    第一个参数是http://服务名/服务地址

     服务地址(服务模块里的controller):

     第二个参数:返回值类型

    4、测试

    注意注册中心服务和服务提供者需要是开启状态才能调用成功

    启动服务,链接访问

     远程调用服务成功

     五、说明之前的负载均衡机制@LoadBalanced

      即注册中心有两个或多个相同的服务时,比如这里有两个PROVIDER-TICKET服务注册了;启动了负载均衡机制时,那么服务消费者远程调用这个PROVIDER-TICKET服务时,

    是轮回着调用的;以达到负载均衡。

  • 相关阅读:
    js--数组中的最值
    js--数组合并并且去重
    js---数组去重的方法总结???
    input 输入框又被输入法遮挡啦
    使用装饰者模式改善既有代码
    简易的 webpack + vue 完成本地化数据 mock
    vue 数据持久化(刷新保存数据)的探索
    JavaScript await 与 promise 的纠葛
    javascript 函数的暂停和恢复
    Symbol 小妙处
  • 原文地址:https://www.cnblogs.com/lyh233/p/12716128.html
Copyright © 2011-2022 走看看