Spring Cloud_Day01_认识SpringCloud+Eureka注册中心(上)

在这里插入图片描述

一、学习环境准备

在这里插入图片描述

二、什么是微服务?

在这里插入图片描述

在这里插入图片描述

三、Spring Cloud

3.1 什么是Spring Cloud

在这里插入图片描述

在这里插入图片描述
学习官网:点击前往

3.2 Spring Cloud 介绍

spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。spring cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 spring boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

spring cloud 对于中小型互联网公司来说是一种福音,因为这类公司往往没有实力或者没有足够的资金投入去开发自己的分布式系统基础设施,使用 spring cloud 一站式解决方案能在从容应对业务发展的同时大大减少开发成本。同时,随着近几年微服务架构和 docker 容器概念的火爆,也会让 spring cloud 在未来越来越“云”化的软件开发风格中立有一席之地,尤其是在目前五花八门的分布式解决方案中提供了标准化的、一站式的技术方案,意义可能会堪比当年 servlet 规范的诞生,有效推进服务端软件系统技术水平的进步。
在这里插入图片描述

四、Spring Cloud 技术组成

在这里插入图片描述

  • eureka
    微服务治理,服务注册和发现

  • ribbon
    负载均衡、请求重试

  • hystrix
    断路器,服务降级、熔断

  • feign
    ribbon + hystrix 集成,并提供声明式客户端

  • hystrix dashboard 和 turbine
    hystrix 数据监控

  • zuul
    API 网关,提供微服务的统一入口,并提供统一的权限验证

  • config
    配置中心

  • bus
    消息总线, 配置刷新

  • sleuth+zipkin
    链路跟踪
    在这里插入图片描述

五、 Spring Cloud 对比 Dubbo

在这里插入图片描述

  • Dubbo
    Dubbo只是一个远程调用(RPC)框架
    默认基于长连接,支持多种序列化格式
  • Spring Cloud 框架集
    提供了一整套微服务解决方案(全家桶)
    基于http调用, Rest API
    在这里插入图片描述

六、Eureka 注册中心 介绍

6.1 什么是注册中心

注册中心可以说是微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式系统中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。简单的来说:服务注册中心的作用就是服务的注册和服务的发现

6.2 Eureka 注册中心

Eureka 是 Netflix 开发的服务发现组件,本身是一个基于 REST 的服务。Spring Cloud 将它集成在其子项目 Spring Cloud Netflix 中,实现 Spring Cloud 的服务注册与发现,同时还提供了负载均衡、故障转移等能力

6.3 学习官网

点击前往:点击前往

6.4 Eureka的三种角色

在这里插入图片描述

角色介绍
Eureka Server通过 Register、Get、Renew 等接口提供服务的注册和发现。
Service Provider服务提供方,把自身的服务实例注册到 Eureka Server 中。
Service Consumer服务调用方,通过 Eureka Server 获取服务列表,消费服务。

6.5 Eureka的运行流程

在这里插入图片描述
在这里插入图片描述

七、 学习准备

7.1 创建父工程

选择maven工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2 统一编码集

在这里插入图片描述

7.3 注解的配置

在这里插入图片描述

7.4 热部署设置

在这里插入图片描述
按下 CTRL+ALT+SHITF+/ 会弹出一个窗口,请点击 Registry 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

八 、 Eureka 入门案例

8.1 创建注册中心

8.1.1 在父工程下新建Module - eureka-server

新建Module 叫:eureka-server
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.1.2 等待依赖下载完成后修改配置文件

将配置文件改成yml文件 复制一下内容

server:
  port: 7001

spring:
  application:
    #该名称在集群模式下应该保持一致
    name: eureka-server

eureka:
  instance:
    #服务注册中心实例的主机名
    hostname: localhost
  client:
    #是否将自己注册到注册中心,默认为 true,单实例模式下需要设置为 false
    register-with-eureka: false
    #是否从注册中心获取服务注册信息,默认为 true,单实例模式下需要设置为 false
    fetch-registry: false
    #注册中心对外暴露的注册地址
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

8.1.3 在SpringBoot主启动类里加注解-@EnableEurekaServer

package com.city.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

8.1.4 启动服务

启动当前注册中心应用服务,然后打开浏览器,在浏览器地址栏中输入:http://localhost:7001/
在这里插入图片描述

8.2 创建服务提供者

8.2.1 在父工程下新建Module - service-provider

新建Module 叫:service-provider
步骤同上!

8.2.2 不同点 - pom.xml中添加的依赖不同

在这里插入图片描述
还有一个lombok 我漏掉了 自行 勾选上 之后用的上

8.2.3 修改配置文件

server:
  port: 8001

spring:
  application:
    #该名称在集群模式下应该保持一致
    name: service-provider

eureka:
  instance:
    #是否使用 ip 地址注册
    prefer-ip-address: true
    #该实例注册到服务中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #设置服务注册中心地址
    service-url:
      defaultZone: http://localhost:7001/eureka/

8.2.4 修改主启动类 – 添加 @EnableEurekaClient 注解

在这里插入图片描述

8.2.5 编写实体类 com.city.serviceprovider.pojo.Item

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Item {
    private Integer id;
    private String name;
    private Double price;
    private Integer count;
}

8.2.6 编写服务层接口

import java.util.List;

public interface ItemService {

    List<Item> findAll();
}

8.2.7 编写服务层接口实现类

import java.util.Arrays;
import java.util.List;

@Service
public class ItemServiceImpl implements ItemService {
    @Override
    public List<Item> findAll() {
        return Arrays.asList(
                new Item(1, "小米手机", 1000.0D, 100),
                new Item(2, "华为手机", 2000.0D, 200),
                new Item(3, "苹果手机", 3000.0D, 300)
        );
    }
}

8.2.8 编写控制层代码

@RestController
public class ItemController {
    @Autowired
    private ItemService itemService;
    @RequestMapping("/provider/item/findAll")
    public List<Item> findAll(){
        return itemService.findAll();
    }
}

8.2.9 启动测试

启动当前服务提供者,然后打开浏览器,在浏览器地址栏中输入:http://localhost:7001/
之前的 Eureka Server 不要停

成功显示:
在这里插入图片描述

8.2.10测试调用findAll

http://localhost:8001/provider/item/findAll
在这里插入图片描述

8.3 创建消费者

8.3.1 在父工程下新建Module - service-consumer

新建Module 叫:service-consumer
步骤同上!

8.3.2 修改yml配置文件

server:
  port: 9001

spring:
  application:
    name: service-consumer9001

eureka:
  client:
    #是否将自己注册到注册中心,默认为 true
    register-with-eureka: false
    #表示 Eureka Client 间隔多久去服务器拉取注册信息,默认为 30 秒
    registry-fetch-interval-seconds: 10
    #设置服务注册中心地址
    service-url:
      defaultZone: http://localhost:7001/eureka/

8.3.3 修改主启动类

@EnableEurekaClient
@SpringBootApplication
public class ServiceConsumer9001Application {
    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumer9001Application.class);
    }

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

8.3.4 编写实体类Item

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Item implements Serializable{
    private Integer id;
    private String name;
    private Double price;
    private Integer count;
}

8.3.5 编写控制层代码

@RestController
public class ItemController {
    public static final String BASE_URL = "http://localhost:8001";

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/consumer/item/findAll")
    public List<Item> findAll() {
        String findAllUrl = BASE_URL + "/provider/item/findAll";
        Item[] items = restTemplate.getForObject(findAllUrl, Item[].class);
        return Arrays.asList(items);
    }
}

8.3.6 测试

启动当前服务消费者,然后打开浏览器,在浏览器地址栏中输入:http://localhost:9001/consumer/item/findAll
在这里插入图片描述
在这里插入图片描述

九、下期更新

下一期会更新 eureka 和 “服务提供者”的高可用,Ribbon
感谢观看。哪里有不对请留言纠错哇!

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小华哥的Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值