浅谈Spring Cloud:认识微服务

SpringCloud就是分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合。

目录

微服务远程调用

Eureka注册中心

[搭建Eureka Server](#搭建Eureka Server)

注册组件

服务拉取


当各种各样的服务越来越多,拆分的也越来越细,此时就会出现一个服务集群。

但是这么多服务,只靠人来管理是不现实的,所以引入了注册中心。

但是每个微服务都需要有不同的配置,我们就需要一个配置中心来管理每个服务的配置文件。

但是还需要管理用户的id,访问之类的事情,就需要一个服务网关。

光有了这些,还需要存储数据的数据库,并且还需要搭配分布式的缓存和搜索。

还需要消息队列来管理服务集群之间的通信。

一直到最后,才完成了整个微服务的整体架构。

微服务远程调用

现在我们有两个微服务(此处看做是两个springboot项目,各自有各自的端口和配置,数据库不是公用的,通过父子关系把一些配置公有化了)。我们需要在一个微服务中,把另一个微服务的接口调用到,该怎么做?

这里是有两个数据库,每个微服务只能查询到自己数据库的内容。我们通过Order模块里面的内容是无法查询到User中的信息的。

对于User服务,在Mapper中有一个GetMapper方法,只需要给它发送请求,它就会返回一个信息出来。于是我们就可以在Order中,也给它发送一个这个请求来获得数据库的信息。并且这个请求是解耦的,并不依赖于某个模块。

注册RestTemplate

一般来说,配置类是Controller,此处的Application也可以作为配置类。我们就直接把RestTemplate注册到Spring中。

在Order中,订单查询功能,是没有用户信息的。用户信息在另一个数据库中,此处查询不到。但是,Order中有用户的ID,通过这个ID可以在另一个数据库中查询到我们想要的结果。

通过restTemplate就能直接给另一个接口发送信息,接收到信息后再整合进原来的order中。

Eureka注册中心

在上述的例子中,远程调用的时候,我们的URL是写死的。当更换机器,或者新增机器的时候,这个URL就需要跟着变更。这样就需要通知所有的相关服务去修改。各个项目的配置文件反复更新,各个项目部署非常频繁。

引入Eureka注册中心,就可以帮助我们完成这一系列的操作。

  • EurekaServer:作为注册中心Server端,向微服务应用程序提供服务注册,发现,健康检查等能力。
  • EurekaClient:服务提供者,服务启动时,会向EurekaServer注册自己的信息(IP,端口,服务信息等),Eureka Server 会存储这些信息。

搭建Eureka Server

新建一个模块,并且选择好Maven

在eureka的pom文件中,配置好相关的信息。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

给该项目编写⼀个启动类,并在启动类上添加服务@EnableEurekaServer 注解,开启eureka注册中心。

配置好相关的配置文件。

启动服务,并且可以访问到eureka的网页。红框框就是被注册的组件。

注册组件

针对user-service,我们注册这个组件到Eureka有两个步骤:

引入pom依赖

修改yml配置文件

注意,这里的配置文件修改极其容易出错,请严格注意格式!

对于order-dervice,步骤是一样的。重启服务,在Eureka的网页中就可以看到两个组件被注册成功。

服务拉取

刚刚是两个组件的情况,如果我们想要开两个服务,可以直接在IDEA里面添加。添加完成后,就会有两个只有端口不同的服务在一起。

现在我们通过order-service完成服务拉取,拉取的内容是user-service中的。

  1. 修改OrderService的代码,修改访问的url路径,用服务名称代替ip和端口

    java 复制代码
    String url = "http://userservice/user/" + order.getUserId();
  2. 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注释

这样子,刚刚我们启动的两个UserApplication,会在收到请求的时候通过负载均衡,动态的控制服务器响应给OrderService。

在地址栏快速的访问127.0.0.1:8080/order/101127.0.0.1:8080/order/102 可以发现这两次请求是在不同的实例上完成的。

搭建 Eureka Server

  1. 引入 eureka-server 依赖。
  2. 添加 @EnableEurekaServer 注解。
  3. application.yml 中配置 Eureka 地址。

服务注册

  1. 引入 eureka-client 依赖。
  2. application.yml 中配置 Eureka 地址。

服务发现

  1. 引入 eureka-client 依赖。
  2. application.yml 中配置 Eureka 地址。
  3. RestTemplate 添加 @LoadBalanced 注解。
  4. 用服务提供者的服务名称远程调用。

这就是通过Eureka注册中心完成服务注册的流程了。只有同一个服务多个实例才能做负载均衡。那么具体讲到负载均衡,我们下一章节再详细说~

相关推荐
码蜂窝编程官方14 分钟前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
猿java1 小时前
什么是 Hystrix?它的工作原理是什么?
java·微服务·面试
AuroraI'ncoding1 小时前
时间请求参数、响应
java·后端·spring
计算机毕设指导63 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
ExiFengs4 小时前
实际项目Java1.8流处理, Optional常见用法
java·开发语言·spring
瓜牛_gn5 小时前
依赖注入注解
java·后端·spring
一元咖啡6 小时前
SpringCloud Gateway转发请求到同一个服务的不同端口
spring·spring cloud·gateway
天天扭码7 小时前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
凡人的AI工具箱7 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang