soul网关系列(五):SpringCloud服务运行实例和SpringCloud概述

SpringCloud服务运行实例和SpringCloud概述

一、背景知识简介

1.1 eureka

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

Eureka包含两个组件,Eureka Server 和 Eureka Client

1.1.1 Eureka Server

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Server既是一个注册中心,同时也是一个服务。那么搭建Eureka Server的方式和以往搭建Dubbo注册中心ZooKeeper的方式必然不同,那么首先搭建一个单机版的Eureka Server注册中心。

这个也是为什么soul-test里有个soul-test-eureka服务的例子吧。
在这里插入图片描述
启动Eureka Server注册中心,和普通的SpringBoot应用的启动没有太大的区别。只需要在启动类上增加@EnableEurekaServer注解,来开启Eureka Server服务即可。

1.1.2 Eureka Client

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
  
Eureka Client分为两个角色,分别是:Application Service(Service Provider)和Application Client(Service Consumer)

  • Application Service,服务提供方,是注册到Eureka Server中的服务。
  • Application Client,服务消费方,通过Eureka Server发现服务,并消费。

1.1.3 架构原理简介

在这里插入图片描述
Register(服务注册):把自己的IP和端口注册给Eureka。
Renew(服务续约):发送心跳包,每30秒发送一次。告诉Eureka自己还活着。
Cancel(服务下线):当provider关闭时会向Eureka发送消息,把自己从服务列表中删除。防止consumer调用到不存在的服务。
Get Registry(获取服务注册列表):获取其他服务列表。
Replicate(集群中数据同步):eureka集群中的数据复制与同步。
Make Remote Call(远程调用):完成服务的远程调用。

1.2 nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。
在这里插入图片描述

二、spring cloud服务运行实例

2.1 前置条件

  • 网关配置页面开启spring-cloud
  • 启动Eureka服务注册中心

2.2 SoulBootstrap配置

  • pom.xml添加依赖
       <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-plugin-springcloud</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-plugin-httpclient</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
  • application-local.yml中添加eureka配置
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
  • 重新编译启动soul-bootstrap,查看启动日志里是否有spring cloud,如果没有,可以进行invalidate Caches & Restart IDEA
    在这里插入图片描述

2.3 spring cloud客户端配置

  • 添加依赖
        <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-client-springcloud</artifactId>
            <version>${soul.version}</version>
        </dependency>
  • yml文件新增配置
eureka:
  client:
    serviceUrl:
      defaultZone:  http://localhost:8761/eureka/

soul:
  springcloud:
    admin-url: http://localhost:9095
    context-path: /springcloud
  • 业务conroller上加上@SoulSpringCloudClient注解,详情请参考官方链接
    在这里插入图片描述

2.4 postman验证

  • step1:初次请求
    在这里插入图片描述
  • 看错误信息没提示serviceId不存在或者配置错误,或者注册中心配置错误,感觉是配置中心错了
  • 检查配置信息,根据官网配置,之前soul-bootstrap配置了pom文件和application-local.yml的eureka
  • 启动了soul-test里自带的soul-test-eureka
  • 重启soul-bootstrap服务
  • soul-test-springcloud配置eureka注册中心,启动soul-test-springcloud服务
  • postman发送http://localhost:9195/springcloud/order/findById?id=1
  • 发现还是报springcloud serviceId错误
  • debug,断点至SpringCloudPlugin的doExecute()方法,肯定会走到这里。
final ServiceInstance serviceInstance = loadBalancer.choose(selectorHandle.getServiceId());
if (Objects.isNull(serviceInstance)) {
            Object error = SoulResultWrap.error(SoulResultEnum.SPRINGCLOUD_SERVICEID_IS_ERROR.getCode(), SoulResultEnum.SPRINGCLOUD_SERVICEID_IS_ERROR.getMsg(), null);
            return WebFluxResultUtils.result(exchange, error);
        }

发现这里为空,然后返回了这个错误。还是注册中心负载均衡中心没有找到可用的service id

  • 看soulBootstrapApplication的日志,发现居然没有eureka的一点痕迹,肯定是erueka注册中心配置不对。
  • 全局eureka搜索soulBootstrap的pom文件,定位到这里默认是屏蔽的
        <!-- springCloud if you config register center is nacos please dependency this-->
<!--        <dependency>-->
<!--            <groupId>com.alibaba.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!--            <version>2.1.0.RELEASE</version>-->
<!--        </dependency>-->

        <!-- springCloud if you config register center is eureka please dependency end-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--            <version>2.2.0.RELEASE</version>-->
<!--        </dependency>-->
  • 发现eureka-client的客户端居然是屏蔽的,大意了,一个低级错误,官网对这块的配置依赖也没说明,打开后,重启后稍等几秒(猜测同步延迟)正常。
    在这里插入图片描述

三、参考链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值