SpringCloudAlibaba - 项目完整搭建(Nacos + OpenFeign + Getway + Sentinel)

目录

一、SpringCloudAlibaba 项目完整搭建

1.1、初始化项目

1.1.1、创建工程

1.1.2、配置父工程的 pom.xml

1.1.3、创建子模块

1.2、user 微服务

1.2.1、配置 pom.xml

1.2.2、创建 application.yml 配置文件

1.2.3、创建启动类

1.2.4、测试

1.3、product 微服务

1.3.1、配置 pom.xml

1.3.2、创建 application.yml 配置文件

1.3.3、创建启动类

1.3.4、测试

1.4、引入 OpenFeign,进行远程调用

1.4.1、引入依赖

1.4.2、实现远程调用

1.5、user 微服务集成 Sentinel

1.5.1、引入 sentinel 依赖

1.5.2、在 application.yml 中配置 sentinel

1.5.3、测试

1.6、网关微服务

1.6.1、配置 pom.xml

1.6.2、创建 application.yml 并配置网关

1.6.3、创建启动类

1.6.4、测试

1.7、nacos 实现配置中心

1.7.1、建议

1.7.2、引入 nacos 配置中心依赖

1.7.3、在 nacos 上创建配置


一、SpringCloudAlibaba 项目完整搭建


1.1、初始化项目

1.1.1、创建工程

a)先创建一个空项目,名字自定义.

Ps:

1. 这里也可以不创建空项目,而是直接创建一个 Maven 项目作为父项目,然后删掉 src 目录即可.

2. 还有一种更方便的管理办法,就是直接创建一个 Spring Boot 项目做为父项目,这样就可以提前引入好依赖,然后只留下 pom.xml 、.gitinore 、.idea 即可.

b)在刚刚的空项目下创建整个项目的父模块

c)父工程下的 src 可以删了,没用

d)最后直接用 IDEA 打开空项目下的父工程(否则 Java 文件不生效)

1.1.2、配置父工程的 pom.xml

a)引入依赖如果没有语法提示,可以这样添加索引

b)配置依赖如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>springcloud_alibaba_parent</artifactId><version>1.0-SNAPSHOT</version><!--配置版本信息--><properties><java.version>8</java.version><spring-cloud.version>Hoxton.SR8</spring-cloud.version><spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version></properties><!--parent--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.9.RELEASE</version></parent><dependencies><!--基本上每个项目都需要日志--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><!--管理依赖规范--><dependencyManagement><dependencies><!-- springCloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud-alibaba --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

Ps:SpringCloud Alibaba 、SpringCloud、SpringBoot 各版本对应说明 如下

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

例如按照上述文档,这里给出一个更新的版本样式(稳定).

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version><mybatis-spring-boot.version>2.3.1</mybatis-spring-boot.version><mysql.version>5.1.49</mysql.version><spring-cloud.version>2021.0.1</spring-cloud.version><spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version></properties><!--维护依赖--><dependencyManagement><dependencies><!-- spring-cloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud-alibaba --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis-spring-boot.version}</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--spring-boot-test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--mybatis-test--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>${mybatis-spring-boot.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement>

1.1.3、创建子模块

在父工程下创建 4 个 module

  • user:用户微服务(案例).
  • product:商品微服务(案例).
  • gateway:网关微服务.
  • model:模组微服务,用来管理实体类,公共依赖(例如 user 微服务和 product 微服务中都需要 spring web 依赖,那么只需要将这个依赖放到 model 中,然后在 user 和 product 中分别引入 model 模块即可)

1.2、user 微服务

1.2.1、配置 pom.xml

用户微服务所需依赖如下(按需引入):

    <dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--nacos-discovery--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency></dependencies>

Ps:不要一开始就引入这么多,按需引入!尤其是 nacos config配置 依赖,如果引入不使用就会报错!

1.2.2、创建 application.yml 配置文件

配置端口号,以及 nacos 地址

server:port: 8090spring:application:name: usercloud:nacos:server-addr: localhost:8890

1.2.3、创建启动类

@SpringBootApplication
@EnableDiscoveryClient // nacos 服务发现(可以省略)
public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}}

启动 user 微服务,就可以看到 nacos 中存在该服务了

1.2.4、测试

创建 UserController,如下

@Slf4j
@RestController
@RequestMapping
public class UserController {@Value("${server.port}")private int port;@GetMapping("/user")public String user() {log.info("user ok!  port={}", port);return "user ok! port=" + port;}}

postman 测试结果如下:

1.3、product 微服务

1.3.1、配置 pom.xml

用户微服务所需依赖如下(按需引入):

    <dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--nacos-discovery--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency></dependencies>

Ps:不要一开始就引入这么多,按需引入!尤其是 nacos config配置 依赖,如果引入不使用就会报错!

1.3.2、创建 application.yml 配置文件

配置端口号,以及 nacos 地址

server:port: 8091spring:application:name: productcloud:nacos:server-addr: localhost:8890

1.3.3、创建启动类

@SpringBootApplication
@EnableDiscoveryClient //可省略
public class ProductApplication {public static void main(String[] args) {SpringApplication.run(ProductApplication.class, args);}}

启动 user 微服务,就可以看到 nacos 中存在该服务了

1.3.4、测试

创建 UserController,如下

@Slf4j
@RestController
@RequestMapping
public class UserController {@Value("${server.port}")private int port;@GetMapping("/user")public String user() {log.info("user ok!  port={}", port);return "user ok! port=" + port;}}

postman 测试结果如下:

1.4、引入 OpenFeign,进行远程调用

1.4.1、引入依赖

在 user 微服务中引入 openfeign 依赖(这里只是举例,实际开发中,按需引入).

        <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

注意:由于SpringCloud Feign高版本(例如 springcloud 2021.0.1)不使用Ribbon而是使用spring-cloud-loadbalancer,所以需要引用spring-cloud-loadbalancer或者降版本

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency>

1.4.2、实现远程调用

a)在 user 微服务中创建一个 product 微服务 feign 接口

@FeignClient("product")
public interface ProductClient {@GetMapping("/product")String product();}

b)在启动类中开启 feign 客户端 

@SpringBootApplication
@EnableDiscoveryClient // nacos 服务发现(可以省略)
@EnableFeignClients // 开启 openfeign 远程调用
public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}}

 c)如果是高版本的 SpringCloud,那么就需要使用 SpringCloud LoadBalencer 做负载均衡.

具体的添加@LoadBalancerClient注解:在调用服务的Service类上添加@LoadBalancerClient注解,并指定服务名。这样,负载均衡器将根据配置的属性来选择合适的服务实例进行调用。例如:

如下:

@FeignClient(value = "service-name", configuration = LoadBalancerClientConfig.class)  
public interface MyService {  @LoadBalanced  //启用负载均衡@GetMapping("/endpoint")  String getEndpointData();  
}

d)在 UserController 中进行远程调用. 

    @GetMapping("/user")public String user() {log.info("user ok!  port={}", port);//远程调用 productString result = productClient.product();log.info("远程调用 result: {}", result);return "user ok! port=" + port;}

执行结果如下:

1.5、user 微服务集成 Sentinel

1.5.1、引入 sentinel 依赖

在 user 微服务中引入 sentinel 依赖

        <!--sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>

1.5.2、在 application.yml 中配置 sentinel

server:port: 8090spring:application:name: usercloud:nacos:server-addr: localhost:8890sentinel:eager: true # 立即触发 sentineltransport:dashboard: localhost:8891

1.5.3、测试

a)打开 sentinel 控制台

b)设置流控规则为 1秒 / 3次点击.

c)测试后限流生效

1.6、网关微服务

1.6.1、配置 pom.xml

    <dependencies><!--gateway--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>

如果使用的是 springcloud高版本(例如 2020.1.0),那么 gateway 中的 ribbon 负载均衡已经被剔除了,因此需要引入 springcloud loadbalencer 作为 gateway 的负载均衡.

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency>

引入此依赖后,可能还会报 cache 的警告,引入一下两个依赖即可

        <dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency>

1.6.2、创建 application.yml 并配置网关

server:port: 18080spring:application:name: gatewaycloud:nacos:server-addr: localhost:8890gateway:routes:- id: users_router# uri: http://localhost:9090 无负载均衡uri: lb://user  # lb 表示负载均衡predicates:- Path=/user- id: products_router# uri: http://localhost:9091uri: lb://productpredicates:- Path=/product

另外,如果配置跨域,如下:

server:port: 18080spring:application:name: gatewaycloud:nacos:server-addr: localhost:8890gateway:routes:- id: users_router# uri: http://localhost:9090 无负载均衡uri: lb://user  # lb 表示负载均衡predicates:- Path=/user- id: products_router# uri: http://localhost:9091uri: lb://productpredicates:- Path=/productglobalcors: # 全局跨域处理cors-configurations:'[/**]':allowedMethods: "*"allowedHeaders: "*"allowedOriginPatterns: "*" # 2.4 以后版本不可以写成 allowedOriginallowCredentials: true

1.6.3、创建启动类

@SpringBootApplication
@EnableDiscoveryClient //(可省略)
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}}

1.6.4、测试

通过网关访问 user 微服务和 product 微服务

1.7、nacos 实现配置中心

1.7.1、建议

一般来说,项目初期开发只用三个组件:nacos注册中心、gateway网关、openFeign声明式远程调用。

值得注意的是,前期项目开发完成之前,也不要使用 nacos 配置中心,原因如下:

  1. 因为一旦需要改什么配置,还需要打开 nacos 修改,容易分心,建议就先用项目中 application.yml 即可
  2. 引入依赖,但不配置,会报错.

1.7.2、引入 nacos 配置中心依赖

这里以 user 微服务为例,引入 nacos 配置中心依赖.

        <!--nacos config--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

注意:SpringCloudAlibaba 高版本(例如 springcloud-alibaba 2021.0.1.0)会忽略 bootstrap.yml 文件,因此需要加上以下配置 

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

1.7.3、在 nacos 上创建配置

a)在 nacos 上创建一个命名空间

b)在配置管理中选择刚创建的命名空间 demo1

c)创建一个新的配置文件,接着就可以把 user 微服务 yml 中配置所有信息都放到 nacos 上进行统一管理,随后点击发布

Ps:配置内容不要有注释! 天坑!

d)创建 bootstrap.yml 配置文件,用来拉去 nacos 上的配置文件.

# 远端配置中心是谁
spring:cloud:nacos:server-addr: locahost:8890config:# 使用 nacos 中的哪个 namespacenamespace: 0e48f075-ad88-4700-a422-d315a81f9ced# 使用 nacos 中的哪个组group: user# 使用 nacos 中的哪个 dataId  1.name+文件后缀 2.文件名+env+后缀name: user-prodfile-extension: yml

Ps:原先的 application.yml 就可以删除了.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【江协科技-用0.96寸OLED播放知名艺人打篮球视频】

Python进行视频图像处理&#xff0c;通过串口发送给stm32&#xff0c;stm32接收数据&#xff0c;刷新OLED进行显示。 步骤&#xff1a; 1.按照接线图连接好硬件 2.把Keil工程的代码下载到STM32中 3.运行Python代码&#xff0c;通过串口把处理后的数据发送给STM32进行显示 …

如何使用 JMeter 进行 HTTPS 请求测试?

本文将介绍如何使用 JMeter 测试 HTTPS 请求&#xff0c;并提供相关的技巧和注意事项。 在进行性能测试时&#xff0c;很多网站都采用了 HTTPS 协议。当我们测试 HTTPS 请求&#xff0c;如果服务端开启了双向认证&#xff0c;则需要客户端发送请求时带上证书。本文介绍如何在 …

cordova Xcode打包ios以及发布流程(ionic3适用)

第一步 1、申请iOS证书 2、导入证书到钥匙串 第二步 1、xcode配置iOS证书 1.1用Xcode打开你的项目&#xff08;我的Xcode版本是新版&#xff09; 修改如下图 回到基本信息设置界面&#xff0c;Bundie 这项填写&#xff0c;最先创建的那个appid&#xff0c;跟创建iOS描述文件时选…

解决方案中word中分页符的使用

在投标方案中要善于使用“分页符”&#xff0c;尽可能少使用分节符号&#xff0c;没有分页符前&#xff0c;你每次修改你的标书或者文件&#xff0c;增加或者修改内容后。你的格式字段前后都是会发生变化&#xff0c;如何稳定的保证结构呢&#xff0c;那就是分页符的使用&#…

RFSoC Debug:Petalinux 不显示 flash选项

这个板子和NI的X410是一样的。 问题 不显示Flash选项 [*] Advanced bootable images storage Settings ---> boot image settings ---> Image storage media (primary flash) --->解决 在Block Design中添加SD卡或者Flash选项&#xff0c;否则就不会显示&#xff1…

HMM与LTP词性标注之命名实体识别与HMM

文章目录 知识图谱介绍NLP应用场景知识图谱&#xff08;Neo4j演示&#xff09;命名实体识别模型架构讲解HMM与CRFHMM五大要素&#xff08;两大状态与三大概率&#xff09;HMM案例分享HMM实体识别应用场景代码实现 知识图谱介绍 NLP应用场景 图谱的本质&#xff0c;就是把自然…

【Hello Algorithm】贪心算法

本篇博客介绍&#xff1a; 简单介绍下贪心算法 贪心算法 介绍贪心算法最小字典序的字符串拼接最多会议数切棍子的最小成本IPO灯塔问题 介绍贪心算法 贪心算法是一种极具有自然智慧的算法 它会使用以一种局部最功利的标准来做出一个当前看来最好的选择 如果说我们根据局部最优…

python图像处理 ——图像锐化

python图像处理 ——图像锐化 前言一、原理二、 空间域锐化滤波1.拉普拉斯算子&#xff08;Laplacian&#xff09;2.罗伯茨算子&#xff08;Roberts&#xff09;3.Sobel算子4.Prewitt算子5.Scharr算子 三、实验对比 前言 由于收集图像数据的器件或传输图像的通道存在一些质量缺…

【C/C++】什么是POD(Plain Old Data)类型

2023年11月6日&#xff0c;周一下午 目录 POD类型的定义标量类型POD类型的特点POD类型的例子整数类型&#xff1a;C 风格的结构体&#xff1a;数组&#xff1a;C 风格的字符串&#xff1a;std::array:使用 memcpy 对 POD 类型进行复制把POD类型存储到文件中&#xff0c;并从文…

idea中配置spring boot单项目多端口启动

参照文章 https://zhuanlan.zhihu.com/p/610767685 项目配置如下 下面为 idea 2023&#xff0c;不同版本的设置有区别&#xff0c;但是没那么大&#xff0c;idea 2023默认使用新布局&#xff0c;切换为经典布局即可。 在项目根目录的.idea/workspace.xml文件里添加如下配置 &l…

紫光同创FPGA编写的8画面分割器演示

适用于板卡型号&#xff1a; 紫光同创PGL50H开发平台&#xff08;盘古50K开发板&#xff09; 图(1) 盘古50K开发板 TOP 层逻辑框 图(2) TOP层逻辑框 video_copy_ux 将输入的一路RGB888信号复制成8份&#xff0c;每份画面内容相同&#xff0c;各路颜色有些差异&#xff1a; 第…

Linux重定向和缓冲区

文章目录 知识回顾&取地址重定向 重定向底层文件描述符分配规则dup2标准输出和标准错误的区别 缓冲区缓冲区总结 知识回顾 我们在之前有了解过输出重定向>, >>,可以让echo命令本来是打印到屏幕上而变成了把这些数据写到文件中&#xff0c;并且可以追加或者覆盖文…

力扣370周赛 -- 第三题(树形DP)

该题的方法&#xff0c;也有点背包的意思&#xff0c;如果一些不懂的朋友&#xff0c;可以从背包的角度去理解该树形DP 问题 题解主要在注释里 //该题是背包问题树形dp问题的结合版&#xff0c;在树上解决背包问题 //背包问题就是选或不选当前物品 //本题求的是最大分数 //先转…

HTML_案例1_注册页面

用纯html页面&#xff0c;不用css画一个注册页面。 最终效果如下&#xff1a; html页面代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title> </head>…

明御安全网关任意文件上传漏洞复现

简介 安恒信息明御安全网关(NGFW) 秉持安全可视、简单有效的理念&#xff0c;以资产为视角的全流程防御的下一代安全防护体系&#xff0c;并融合传统防火墙、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 较低版本的系统存…

Vue、fabricJS 画布实现自由绘制折线

作者GitHub&#xff1a;https://github.com/gitboyzcf 有兴趣可关注 Vue3代码&#xff0c;Vue2相似改吧改吧 前言 Fabric.js Fabric.js&#xff08;英文官网&#xff09;是一个强大而简单的 Javascript HTML5画布库&#xff08;也就是针对canvas进行的封装操作&#xff0c;使…

CentOS/RHEL7环境下更改网卡名称为CentOS6的传统命名规则

图片 CentOS/RHEL7网卡命名规则介绍 图片 传统的Linux服务器网卡的名称命名方式是从eth0,eth1,eth2....这种方式命名的&#xff0c;但是这个编号往往不一定准确对应网卡接口的物理顺序&#xff0c;常规模式下我们使用的服务器设备可能只有一张网卡&#xff0c;若网卡较多的情…

2023年中国金融控股公司研究报告

第一章 行业概况 1.1 定义 金融控股公司这一术语最初源自美国&#xff0c;特别是在美国的《金融服务法案》关于银行控股公司组织结构的条文中&#xff0c;首次出现了“金融控股公司”&#xff08;Financial Holding Company&#xff09;这一法律术语&#xff0c;尽管法案中并…

Flink SQL DataGen Connector 示例

Flink SQL DataGen Connector 示例 1、概述 使用 Flink SQL DataGen Connector&#xff0c;可以快速地生成符合规则的测试数据&#xff0c;可以在不依赖真实数据的情况下进行开发和测试。 2、使用示例 创建一个名为 “users” 的表&#xff0c;包含 6 个字段&#xff1a;id…