1 | Spring Cloud萌新入门

一、 概述

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

SpringCloud分布式开发五大常用组件

  • 服务发现——Netflix Eureka
  • 客服端负载均衡——Netflix Ribbon
  • 断路器——Netflix Hystrix
  • 服务网关——Netflix Zuul
  • 分布式配置——Spring Cloud Config

二、入门实验

本实验主要是演示Spring Cloud 分布式的实现和效果

首先,创建一个空项目,再创建三个模块,分别是Eureka注册中心、生产者、消费者模块

Eureka注册中心模块

(1)导入依赖
在这里插入图片描述

(2)配置文件

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/

启动启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}

访问 http://localhost:8761/
在这里插入图片描述

生产者模块

(1)导入依赖
在这里插入图片描述

(2)配置文件

server:
  port: 8002
spring:
  application:
    name: provider
eureka:
  instance:
    prefer-ip-address: true # 注册服务的时候使用服务的ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

(3)编写controller层和service层demo

@RestController
public class ProController {
    @Autowired
    ProviderService providerService;

    @GetMapping("/ticket")
    public String getTicket() {
        return providerService.getTicket();
    }
}

@Service
public class ProviderService {
    public String getTicket() {
        System.out.println("8002");
        return "《厉害了,我的国》";
    }
}

启动启动类,注意Eureka注册中心启动类不要停止
在这里插入图片描述

刷新页面你会看到provider已经注册进来了

消费者模块

(1)导入依赖
在这里插入图片描述

(2)配置文件

spring:
  application:
    name: consumer
server:
  port: 8200
eureka:
  instance:
    prefer-ip-address: true # 注册服务的时候使用服务的ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

(3)向容器中注入RestTemplate, 并使用@EnableDiscoveryClient开启发现服务功能

@SpringBootApplication
@EnableDiscoveryClient //开启发现服务功能
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

    @LoadBalanced //使用负载均衡机制
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

(4)编写controller并使用RestTemplate发现服务

@RestController
public class UserController {

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/buy")
    public String buyTicket(String name) {
        String s = restTemplate.getForObject("http://PROVIDER/ticket", String.class);
        return name + "购买了" + s;
    }
}

向http://localhost:8200/buy?name=zhangsan发请求,则会响应

zhangsan购买了《厉害了,我的国》

并且在使用了@LoadBalanced之后实现了负载均衡,如果创建不同端口的provider应用,则访问会被均衡到各个应用
在这里插入图片描述

刷新一次http://localhost:8200/buy?name=zhangsan
在这里插入图片描述

再刷新多次,这就是负载均衡的效果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值