【微服务笔记23】使用Spring Cloud微服务组件从0到1搭建一个微服务工程

news2024/12/22 20:20:19

这篇文章,主要介绍如何使用Spring Cloud微服务组件从0到1搭建一个微服务工程。

目录

一、从0到1搭建微服务工程

1.1、基础环境说明

(1)使用组件

(2)微服务依赖

1.2、搭建注册中心

(1)引入依赖

(2)配置文件

(3)启动类

1.3、搭建配置中心

(1)引入依赖

(2)配置文件

(3)启动类

1.4、搭建API网关

(1)引入依赖

(2)配置文件

(3)启动类

1.5、搭建服务提供者

(1)引入依赖

(2)配置文件

(3)启动类

1.6、搭建服务消费者

(1)引入依赖

(2)配置文件

(3)启动类

1.7、运行测试


一、从0到1搭建微服务工程

1.1、基础环境说明

(1)使用组件

这里主要是使用的Spring Cloud Netflix微服务组件搭建工程,其中需要搭建下面这些组件工程:

  • 注册中心:采用Eureka实现注册中心。
  • 配置中心:采用Spring Cloud Config实现配置中心。
  • API网关:采用Spring Cloud Gateway作为网关。
  • 服务调用:采用OpenFeign实现服务之间的调用。
  • 负载均衡:采用Ribbon实现服务的负载均衡。

大致如下所示:

工程代码结构:

(2)微服务依赖

<!-- 引入SpringBoot依赖 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencyManagement>
    <!-- 使用 dependencyManagement 依赖管理,统一管理组件的版本 -->
    <dependencies>
        <!-- 引入 SpringCloud 微服务依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

1.2、搭建注册中心

这里采用单机的Eureka注册中心,当然也可以使用集群的Eureka注册中心。

(1)引入依赖

<!-- 引入 eureka 服务端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

(2)配置文件

server:
  port: 8761
spring:
  application:
    name: cloud-eureka-server
# 配置 eureka 服务端
eureka:
  client:
    register-with-eureka: false # 是否将自己注册到eureka注册中心
    fetch-registry: false # 是否从eureka注册中心获取注册信息

(3)启动类

package com.gitcode.demo;

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

/**
 * @version 1.0.0
 * @Date: 2023/4/26 20:27
 * @Copyright (C) ZhuYouBin
 * @Description: Eureka 注册中心服务端启动类
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaApp {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApp.class, args);
    }
}

1.3、搭建配置中心

采用Spring Cloud Config组件实现配置中心的功能。

(1)引入依赖

<!-- 引入 eureka 客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入 config-server 服务端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

(2)配置文件

server:
  port: 8888
spring:
  application:
    name: cloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitcode.net/qq_39826207/config-demo.git # Git仓库的地址
#          username: # Git仓库的登录用户名称
#          password: # Git仓库的登录密码
#          default-label: # 默认访问的分支名称
#          search-paths: # 搜索的根目录,从仓库中的哪个目录中开始查找配置文件

# eureka 配置
eureka:
  instance:
    hostname: ${spring.application.name}
    prefer-ip-address: true # 开启采用 IP 注册形式
    # ${spring.cloud.client.ip-address} 这个属性可以获取到当前机器的 IP 地址
    instance-id: ${spring.cloud.client.ip-address}:${server.port} # 设置当前服务的实例ID,采用:IP+端口形式
  client:
    register-with-eureka: true # 是否将自己注册到eureka注册中心
    fetch-registry: true # 是否从eureka注册中心获取注册信息
    service-url:
      defaultZone: http://localhost:8761/eureka/ # eureka服务端的地址

(3)启动类

package com.gitcode.demo;

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

/**
 * @version 1.0.0
 * @Date: 2023/4/26 20:37
 * @Copyright (C) ZhuYouBin
 * @Description: Config 配置中心服务端启动类
 */
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigApp {
    public static void main(String[] args) {
        SpringApplication.run(ConfigApp.class, args);
    }
}

1.4、搭建API网关

采用Spring Cloud Gateway实现API网关的功能。

(1)引入依赖

<!-- 引入 eureka 客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入 Gateway 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

(2)配置文件

server:
  port: 8080
spring:
  application:
    name: cloud-api-gateway
  cloud:
    gateway:
      # 动态服务转发
      discovery:
        locator:
          enabled: true # 启用动态路由服务名称转发功能
          lower-case-service-id: true # 开启服务名称小写

# eureka 配置
eureka:
  instance:
    hostname: ${spring.application.name}
    prefer-ip-address: true # 开启采用 IP 注册形式
    # ${spring.cloud.client.ip-address} 这个属性可以获取到当前机器的 IP 地址
    instance-id: ${spring.cloud.client.ip-address}:${server.port} # 设置当前服务的实例ID,采用:IP+端口形式
  client:
    register-with-eureka: true # 是否将自己注册到eureka注册中心
    fetch-registry: true # 是否从eureka注册中心获取注册信息
    service-url:
      defaultZone: http://localhost:8761/eureka/ # eureka服务端的地址

(3)启动类

package com.gitcode.demo;

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

/**
 * @version 1.0.0
 * @Date: 2023/4/26 20:49
 * @Copyright (C) ZhuYouBin
 * @Description: Gateway 网关启动类
 */
@EnableEurekaClient
@SpringBootApplication
public class GatewayApp {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApp.class, args);
    }
}

1.5、搭建服务提供者

(1)引入依赖

<!-- 引入 web 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 eureka 客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入 config-client 客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>

(2)配置文件

  • 注意:这里创建的配置文件必须是【bootstrap.yml】,因为需要从配置中心获取配置信息。
server:
  port: 6250
spring:
  application:
    name: biz-provider
  cloud:
    config:
      name: biz-provider # 从 Git 仓库获取的配置文件名称
      label: master # 从哪个分支获取
      profile: dev # 获取哪个环境下的配置文件
      # 从注册中心获取配置信息
      discovery:
        enabled: true # 开启服务发现的功能,这里也就是支持eureka的功能
        service-id: cloud-config-server # config server服务端的微服务应用名称

(3)启动类

package com.gitcode.demo;

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

/**
 * @version 1.0.0
 * @Date: 2023/4/26 20:57
 * @Copyright (C) ZhuYouBin
 * @Description: 服务提供者启动类
 */
@EnableEurekaClient
@SpringBootApplication
public class ProviderApp {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApp.class, args);
    }
}

1.6、搭建服务消费者

服务消费者需要调用服务提供者的接口,所以这里需要引入OpenFeign组件。

(1)引入依赖

<!-- 引入 web 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 eureka 客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入 config-client 客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>
<!-- 引入 OpenFeign 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

(2)配置文件

  • 注意:这里创建的配置文件必须是【bootstrap.yml】,因为需要从配置中心获取配置信息。
server:
  port: 9527
spring:
  application:
    name: biz-consumer
  cloud:
    config:
      name: biz-consumer # 从 Git 仓库获取的配置文件名称
      label: master # 从哪个分支获取
      profile: dev # 获取哪个环境下的配置文件
      # 从注册中心获取配置信息
      discovery:
        enabled: true # 开启服务发现的功能,这里也就是支持eureka的功能
        service-id: cloud-config-server # config server服务端的微服务应用名称

(3)启动类

package com.gitcode.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @version 1.0.0
 * @Date: 2023/4/26 21:11
 * @Copyright (C) ZhuYouBin
 * @Description: 服务消费者启动类
 */
@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class ConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp.class, args);
    }
}

1.7、运行测试

依次启动Eureka注册中心、Config配置中心、Gateway网关、Consumer服务消费者、Provider服务提供者,查看注册中心是否正常。

浏览器,通过Gateway访问Consumer消费者工程中的接口【http://localhost:8080/biz-consumer/api/consumer/getUserInfo】,注意:测试接口的代码没有贴出来,可以到我的代码仓库里面查看。

到此,从0到1的微服务工程搭建完成。

综上,这篇文章结束了,主要介绍如何使用Spring Cloud微服务组件从0到1搭建一个微服务工程【源代码】。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网课/网校/知识付费/在线教育系统,100%全功能开源,可免费商用

一、开源项目简介 酷瓜云课堂&#xff0c;依托腾讯云基础服务架构&#xff0c;采用C扩展框架Phalcon开发&#xff0c;GPL-2.0开源协议&#xff0c;致力开源网课系统&#xff0c;开源网校系统&#xff0c;开源知识付费系统&#xff0c;开源在线教育系统。 酷瓜云课堂 - 网课系…

【LeetCode: 322. 零钱兑换 | 暴力递归=>记忆化搜索=>动态规划 | 背包模型】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

JavaScript 知识总结中篇(更新版)

72.get 请求传参长度的误区 常说&#xff1a;get 请求参数的大小存在限制&#xff0c;而 post 请求的参数大小无限制。 实际上 HTTP 协议并未规定 get / post 的请求参数大小限制。 纠正误区&#xff1a;是浏览器或 web 服务器对 get 请求参数的最大长度显示进行限制&#xf…

Nature Neuroscience:高家红团队首次发布中国人脑连接组计划研究成果及其大数据资源

人类生活在充满多样性的世界里。长久以来的研究发现&#xff0c;人类的脑与行为受到基因、环境和文化及其相互作用的塑造&#xff0c;然而这种影响发生的机制始终缺乏系统性探索与研究。近年来&#xff0c;前沿神经影像技术方法飞速进步&#xff0c;推动着多模态脑成像大数据集…

索尼ILCE-7SM3覆盖恢复案例

ILCE-7SM3算是索尼的流量级产品了&#xff0c;目前使用的比较多。今天我们来看一个格式化后又覆盖的恢复案例&#xff0c;看看这种情况下如何恢复残留的视频素材。 故障文件:80G SD卡 故障现象: 80G卡实际容量在74.5G左右&#xff0c;ExFat文件系统&#xff0c;格式化后又录…

Java8新特性-Stream

文章目录 简介Stream 的特性创建Stream通过集合创建流通过数组创建流通过Stream.of方法创建流创建规律的无限流创建无限流创建空流 Stream操作分类中间操作无状态filtermapflapMap 有状态distinctsortedreversedthenComparinglimitskipconcat 终结操作非短路操作forEachreducec…

D. Kilani and the Game(BFS模拟向四周漫延的过程)

Problem - D - Codeforces Kilani正在和他的朋友玩一个游戏。这个游戏可以表示为一个nm的网格&#xff0c;其中每个单元格都是空的或者被阻塞的&#xff0c;并且每个玩家在一些单元格中拥有一个或多个城堡&#xff08;一个单元格中没有两个城堡&#xff09;。 游戏分轮进行。每…

JS高级 -- 构造函数、数据常用函数

1. 深入对象 1.1 创建对象三种方式 利用对象字面量创建对象 const o {name:佩奇 }利用 new object 创建对象 const o new Object({ name:佩奇}) console.log(o) // {name: 佩奇}利用构造函数创建对象 1.2 构造函数 构造函数&#xff1a;是一种特殊的函数&#xff0c;主要…

SpringBoot+Vue3实现登录验证码功能

系列文章目录 Redis缓存穿透、击穿、雪崩问题及解决方法Spring Cache的使用–快速上手篇分页查询–Java项目实战篇全局异常处理–Java实战项目篇 Java实现发送邮件&#xff08;定时自动发送邮件&#xff09;_java邮件通知_心态还需努力呀的博客-CSDN博客 该系列文章持续更新…

最高效的七个云原生开发原则

​Cloud native是一种软件开发方法&#xff0c;利用云基础架构实现更快、更可扩展的部署。云原生应用程序旨在充分利用现代化的工程实践&#xff0c;如自动化、托管服务和自动扩展控制。 这种模式对组织文化和工作实践也有影响。云技术应成为软件交付的重要组成部分。每个人都…

迅为三星4412开发板UDP实现服务器和客户端

UDP 协议是开放式&#xff0c;无连接&#xff0c;不可靠的传输层通信协议&#xff0c;但它收发数据的速度相对于 TCP 快很多&#xff0c;常 用在传输音视频等数据量非常大的场合。 udp 网络编程只需要使用一个类 QUdpSocket。 本实验中对 QUdpSocket 的基本使用&#xff1a; …

选择DAO的组织结构时,应着重考虑的各个关键阶段与安全可靠性

近年来&#xff0c;去中心化自治组织 (Decentralized Autonomous Organizations&#xff0c;DAO)已成为了管理智能合约项目和社区的流行方式。简单而言&#xff0c;DAO是一个基于智能合约运作的数字化组织。组织内的成员可以根据对应的模型结构&#xff0c;做出不同的决策。虽然…

哪款蓝牙耳机学生用合适?学生党平价无线耳机推荐

近年来&#xff0c;蓝牙耳机凭借使用便捷&#xff0c;成为了许多人生活中不可或缺的一部分。不管是听歌、追剧还是玩游戏&#xff0c;或者运动等等&#xff0c;都能看到戴蓝牙耳机的人。那么&#xff0c;哪款蓝牙耳机适合学生用&#xff1f;下面&#xff0c;我来给大家推荐几款…

Unsupervised Learning of Depth and Ego-Motion from Video 论文精读

视频中深度和自我运动的无监督学习 摘要 我们提出了一个无监督学习框架&#xff0c;用于从非结构化视频序列中进行单眼深度和相机运动估计。与其他工作[10&#xff0c;14&#xff0c;16]一样&#xff0c;我们使用端到端的学习方法&#xff0c;将视图合成作为监督信号。与之前…

C++ 线程

linux使用线程 在linux使用线程可能出现&#xff0c;在编译时不会报错&#xff0c;但执行出错的问题。 undefined reference to pthread_create这是由于ubuntu平台下调用pthread_create()函数&#xff0c;pthread 库不是 Linux 系统默认的库&#xff0c;连接时需要使用静态库 …

Word转PDF:简单步骤,轻松完成!推荐两个实现的方法

随着社会的发展&#xff0c;PDF 文件已经成为一种非常流行的文件格式&#xff0c;对于一些需要对文件进行保密的企业而言&#xff0c;更是必不可少。在这样的大背景下&#xff0c;如何将 Word 文件转换为 PDF 文件呢&#xff1f;下面是一些简单的步骤&#xff0c;帮助您轻松完成…

Rust-Shyper:基于 Rust 语言的高可靠、开源嵌入式 Hypervisor

「Rust-Shyper 是北京航空航天大学计算机学院王雷教授团队设计开发的虚拟机监控器&#xff0c;该系统基于 Rust 语言&#xff0c;实现了一个高可靠、嵌入式 Hypervisor。2023 年 2 月 15 日 Rust-Shyper 正式在 openEuler 社区开源。」 项目地址&#xff1a;https://gitee.com…

论文阅读笔记:Hearing Lips Improving Lip Reading by Distilling Speech Recognizers

目录 论文链接 研究背景 LIBS 的整体框架 序列级知识蒸馏 上下文级知识蒸馏 最长公共子序列 (LCS) 帧级别知识蒸馏 论文链接 [1911.11502] Hearing Lips: Improving Lip Reading by Distilling Speech Recognizers (arxiv.org) 研究背景 这篇文章针对由于唇语识别动作…

【观察】解码“一网统管”:城市治理“新范式”,推动数字城市建设迈向“新高度”...

众所周知&#xff0c;随着城市化进程加快&#xff0c;大量的人员、物资、技术和信息等要素日益向城市汇聚&#xff0c;城市系统变得越来越复杂&#xff0c;随之而来的社会问题和“城市病”也层出不穷&#xff0c;而传统的治理模式和治理手段越来越难以胜任日益复杂城市的管理需…

深聊丨第四范式陈雨强:如何用AI大模型打开万亿规模传统软件市场?

文丨亲爱的数据 谭婧 “GPT大模型到底能不能用&#xff1f;用在哪里&#xff1f;” 这是目前中国大型企业一把手最关心的问题之一。AI大模型也被媒体称为“一把手”工程。 大型企业会非常认真地考虑大模型的应用。最近个把月&#xff0c;大型企业客户对大模型的热烈反应让第四范…