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

news2024/11/28 4:37:48

目录

一、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)先创建一个空项目,名字自定义.

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

1.1.3、创建子模块

在父工程下创建 4 个 module

  • user:用户微服务(案例).
  • product:商品微服务(案例).
  • gateway:网关微服务.
  • 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: 8090

spring:
  application:
    name: user
  cloud:
    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: 8091

spring:
  application:
    name: product
  cloud:
    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>

1.4.2、实现远程调用

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

@FeignClient("product")
public interface ProductClient {

    @GetMapping("/product")
    String product();

}

在启动类中开启 feign 客户端 

@SpringBootApplication
@EnableDiscoveryClient // nacos 服务发现(可以省略)
@EnableFeignClients // 开启 openfeign 远程调用
public class UserApplication {

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

}

在 UserController 中进行远程调用. 

    @GetMapping("/user")
    public String user() {
        log.info("user ok!  port={}", port);
        //远程调用 product
        String 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: 8090

spring:
  application:
    name: user
  cloud:
    nacos:
      server-addr: localhost:8890
    sentinel:
      eager: true # 立即触发 sentinel
      transport:
        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>

 

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

server:
  port: 18080

spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8890
    gateway:
      routes:
        - id: users_router
          # uri: http://localhost:9090 无负载均衡
          uri: lb://user  # lb 表示负载均衡
          predicates:
            - Path=/user

        - id: products_router
          # uri: http://localhost:9091
          uri: lb://product
          predicates:
            - Path=/product

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

server:
  port: 18080

spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8890
    gateway:
      routes:
        - id: users_router
          # uri: http://localhost:9090 无负载均衡
          uri: lb://user  # lb 表示负载均衡
          predicates:
            - Path=/user

        - id: products_router
          # uri: http://localhost:9091
          uri: lb://product
          predicates:
            - Path=/product
      globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站的跨域请求
              - "http://localhost:8090"
              - "http://www.cyk.com"
            allowedMethods: # 允许的跨域ajax/axios的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允许在请求中携带的头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效期(为例减少性能损耗,在有效时间内,浏览器将不在发起询问,直接放行通过)

 

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>

1.7.3、在 nacos 上创建配置

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

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

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

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

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

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

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

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

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

相关文章

LIME低亮度图像增强

LIME低亮度图像增强 main.cpp #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <opencv2/imgproc/imgproc.hpp> #include "lime.h"int main() {cv::Mat img_in cv::imread("…

Hello AIGC类杂志实验

shadow 类杂志是我们从6月开始孵化的一个小型内容产品。目前还在不断迭代升级中~~ 今天和大家聊聊心得体会&#xff1a; 从2023-06-12发布第一期以来&#xff0c;我和小杜一起打磨了前面几期&#xff0c;逐步找到稳定的内容表达方式后&#xff0c;由小杜独立负责此类杂志的更新…

c语言从入门到实战——函数递归

函数递归 前言1. 递归是什么&#xff1f;2. 递归的限制条件3. 递归举例3.1 举例1&#xff1a;求n的阶乘3.1.1 分析和代码实现3.1.2 画图推演 3.2 举例2&#xff1a;3.2.1 分析和代码实现3.2.2 画图推演 4. 递归与迭代 前言 函数递归是指一个函数直接或间接地调用自身&#xff…

13 Linux 蜂鸣器

一、蜂鸣器驱动原理 常用蜂鸣器分两种&#xff0c;有源蜂鸣器和无源蜂鸣器。 它们俩的区别&#xff1a;有源蜂鸣器具有内置的振荡器和驱动电路&#xff0c;无源蜂鸣器没有&#xff1b;源蜂鸣器只需简单的数字信号来控制&#xff0c;无源蜂鸣器需要外部电路或微控制器来提供特定…

Spring和SpringMVC总结

一、Spring IoC(Inversion of Control)中文名称&#xff1a;控制反转&#xff08;对象的创建交给Spring管理&#xff09;。DI(dependency injection )依赖注入。容器&#xff08;Container&#xff09;&#xff1a;放置所有被管理的对象。beans&#xff1a;容器中所有被管理的对…

Rust编程基础核心之所有权(下)

1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据&#xff0c;而不仅仅是栈上的数据&#xff0c;可以使用一个叫做 clone 的通用函数。 看下面的代码…

国产数据库人大金仓Kingbase数据迁移工具

点击上方蓝字关注我 在做国产数据库适配过程中经常需要将现有数据库的数据迁移至国产数据库中&#xff0c;在适配在人大金仓Kingbase数据库时&#xff0c;可以使用KDTS进行数据迁移。 1. 支持迁移的数据库及对象 2. 迁移工具安装 地址&#xff1a;https://www.kingbase.com.c…

多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测

多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络…

农业水土环境与面源污染建模及对农业措施响应

目录 ​专题一 农业水土环境建模概述 专题二 ArcGIS入门 专题三 农业水土环境建模流程 专题四 DEM数据制备流程 专题五 土地利用数据制备流程 专题六 土壤数据制备流程 专题七 气象数据制备流程 专题八 农业措施数据制备流程 专题九 参数率定与结果验证 专题十 模型结…

【Python语言】比较四个数或多个数的大小

重点&#xff1a;sorted()函数可以对列表进行升序排序 思路&#xff1a;利用Python语言中的列表排序函数简单粗暴的解决比较大小问题 a int(input("请输入第一个数&#xff1a;")) b int(input("请输入第二个数&#xff1a;")) c int(input("请输…

反射型跨站点脚本攻击

测试过程: /ylpj/dwr/interface/%20idxIndexDicService/%22%3E%3Cscript%3Ealert(988)%3C/script%3E 解决方案: nginx添加 if ($args ~* "%3Cscript%3E") {return 400;}if ($request_uri ~* "%3Cscript%3E") {return 400; } 解决效果:

Java操作redis常见类型数据存储

目录 一、Java连接Redis 1.1 导入pom依赖 1.2 建立连接 二、Java使用Redis 2.1 字符串 String 2.2 哈希 Hash 2.3 列表 List 2.4 集合 Set 2.4 有序集合 Sorted Set 一、Java连接Redis redis与mysq都是数据库&#xff0c;java操作redis其实跟操作mysql的过程是差不多的…

C++性能优化笔记-6-C++元素的效率差异-7-类型转换

C元素的效率差异 类型转换signed与unsigned转换整数大小转换浮点精度转换整数到浮点转换浮点到整数转换指针类型转换重新解释对象的类型const_caststatic_castreinterpret_castdynamic_cast转换类对象 类型转换 在C语法中&#xff0c;有几种方式进行类型转换&#xff1a; // …

【每日一题】重复的DNA序列

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;哈希表方法二&#xff1a;哈希表滑动窗口位运算 写在最后 Tag 【哈希表】【位运算滑动窗口哈希表】【字符串】【2023-11-05】 题目来源 187. 重复的DNA序列 题目解读 找出字符串中重复出现的字符串。 解题思路 方法…

Android Gldie复用只取之前decode过的缓存resource,Kotlin

Android Gldie复用只取之前decode过的缓存resource&#xff0c;Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.life…

数据可视化:地图

1.基础地图的使用 如何添加颜色表示层级 代码实现 """基础地图的使用 """ from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京市", 9),("上海市…

【漏洞复现】Apache_HTTP_2.4.49_路径穿越漏洞(CVE-2021-41773)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞验证方式一 curl方式二 bp抓包 说明内容漏洞编号CVE-2021-41773漏洞名称Apache HTTP 路径穿越漏洞漏…

Transformer:开源机器学习项目,上千种预训练模型 | 开源日报 No.66

huggingface/transformers Stars: 113.5k License: Apache-2.0 这个项目是一个名为 Transformers 的开源机器学习项目&#xff0c;它提供了数千种预训练模型&#xff0c;用于在文本、视觉和音频等不同领域执行任务。该项目主要功能包括&#xff1a; 文本处理&#xff1a;支持…

YOLOv5源码中的参数超详细解析(5)— 验证部分(val.py)参数解析

前言:Hello大家好,我是小哥谈。YOLOv5是一种先进的目标检测算法,它可以实现快速和准确的目标检测。在YOLOv5源码中,train.py和detect.py文件讲完了之后,接着就是讲val.py文件了。本节课就结合源码对val.py文件进行逐行解析~!🌈 前期回顾: YOLOv5源码中的参数超详细解…

对Java的多线程的理解

说说对Java线程的理解 下面是AI的回答 Java线程就是Java程序里面可以同时运行多个任务。Java提供了几种创建和管理线程的方式&#xff0c;其中一种是继承Thread类&#xff0c;另一种是实现Runnable接口或Callable接口。jdk5提供了线程池&#xff0c;可以更方便地创建、启动和终…