SpringCloud知识点总结

 一、nacos

1、nacos简介

        Nacos是阿里巴巴开源的一个对微服务架构中服务发现,配置管理和服务管理平台,由于第一代SpringCloud也就是SpringCloud Netflix很多组件已经进入停更维护模式,所以迫使我们必须要找到一个可以代替Netflix的第二代产品,这时候SpringCloud Alibaba出现了。
Nacos就是注册中心 + 配置中心的结合体

 2、nacos下载

请确保远程服务器有以下环境:

jdk1.8+

下载地址:https://github.com/alibaba/nacos/releases,下载2.1.1版本的

上传远程服务

#远程安装地址
/usr/local/nacos-2.1.1

解压

tar -zxvf nacos-server-2.1.1.tar.gz

修改startup.sh

vim /usr/local/nacos-2.1.1/nacos/bin/startup.sh

备注:nacos启动默认集群,改成单机启动。

启动(进去nacos/bin目录下执行)

./startup.sh

这样就安装成功了。

备注:如果启动失败的话,可能是JDK环境未配置好。

查看启动日志:

tail -n 30 /usr/local/nacos-2.1.1/nacos/logs/start.out

 备注:这里的访问地址是内网地址,如果是远程服务器需要使用公网ip访问。

http://10.0.0.15:8848/nacos/index.html

3、远程服务器安装nacos

例:腾讯云

(1)、添加腾讯云防火墙规则(8848、9848、9849端口)

 (2)、linux服务器开放(8848、9848、9849端口)

firewall-cmd --add-port=8848/tcp --permanent
firewall-cmd --add-port=9848/tcp --permanent
firewall-cmd --add-port=9849/tcp --permanent
#重启防火墙
systemctl restart firewalld

备注:nacos2.x以后的版本需要多开放2个端口,否则后期整合时,无法连接配置中心和服务中心。

4、nacos持久化

(1)、创建naocs数据库

(2)、导入下面位置sql文件

/usr/local/nacos-2.1.1/nacos/conf/nacos-mysql.sql

 

(3)、更新配置文件

vim /usr/local/nacos-2.1.1/nacos/conf/application.properties

//加入以下内容即可
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456

 

 验证:登录nacos--》权限控制--》用户管理--》添加用户

结果:nacos数据库中users表信息更新。

二、Spring Cloud Alibaba环境搭建

请确保是在以下版本环境中安装使用:

64 bit JDK 17+;下载 & 配置。 17.0.4

Maven 3.2.x+;下载 & 配置。 3.9.2

(1)基于SpringBoot的父maven项目

(2)创建2个服务(生产者和服务者)

1、配置nacos

(1)、创建命名空间

 (2)、导入相关配置(也可以自己创建)相关配置内容顶部下载

 (2)、自己创建

 nacos-provider.yaml

server:
  port: 8001

nacos-customer.yml

server:
  port: 8002

 nacos-gateway.yml

server:
  port: 8003
spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # 从nacos发现微服务
      routes:
        - id: nacos-provider  # 路由 id,确定唯一加尔肯
          uri: lb://nacos-provider  # lb 表示从 nacos 中按照名称获取微服务,并遵循负载均衡策略,user-service 对应用户微服务应用名
          predicates:
            - Path=/hello/**
          filters:
            - AddRequestParameter=username,zhangsan
        - id: nacos-customer
          uri: lb://nacos-customer
          predicates:
            - Path=/customer/**

(3)、结果

备注:nacos-provider.yaml多了个a,验证跟配置格式一致是否能读取。是可以的

2、服务创建

创建NacosDemo服务

pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.0.8</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>nacosDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>nacosDemo</name>
	<!--    打包方式,目的方便子类引用(不写无法引用)不是jar包的话,本身不能当作服务使用-->
	<packaging>pom</packaging>

	<description>nacosDemo</description>
	<properties>
		<java.version>17</java.version>
		<nacos.version>2.1.1</nacos.version>
		<spring-cloud-starter.version>4.0.2</spring-cloud-starter.version>
		<spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
	</properties>
	<!--子模块继承后:可锁定版本+不需要输groupId和version -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>com.alibaba.cloud</groupId>
				<artifactId>spring-cloud-alibaba-dependencies</artifactId>
				<version>${spring-cloud-alibaba.version}</version>
				<type>pom</type>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<!-- Nacos 服务注册和发现 -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>${spring-cloud-alibaba.version}</version>
		</dependency>
		<!--nacos 配置-->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
			<version>${spring-cloud-alibaba.version}</version>
		</dependency>
		<!--nacos 连接工具(跟nacos版本一致)-->
		<dependency>
			<groupId>com.alibaba.nacos</groupId>
			<artifactId>nacos-client</artifactId>
			<version>${nacos.version}</version>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 创建子模块nacos-provider(生产者)

目录如下:

 nacos-provider(生产者)application.yml

注: 根据自己的命名空间、dataId、group、服务器公网ip相关填写配置文件。

spring:
  # 服务名称
  application:
    name: nacos-provider
  # nacos配置
  config:
    # cloud大于2021.0.4使用下面  nacos:DataId
    import: nacos:nacos-provider.yaml
  cloud:
    nacos:
      username: nacos
      password: nacos
      # nacos地址 ip:端口
      server-addr: 127.0.0.1:8848
      # 服务注册
      discovery:
        # 命名空间
        namespace: f82c9413-e463-4bf0-91e3-da2d5a53bdbb
        # 组(默认分组可不填)
        group: DEFAULT_GROUP
      # 配置中心
      config:
        # 命名空间
        namespace: f82c9413-e463-4bf0-91e3-da2d5a53bdbb
        # 组(默认分组可不填)
        group: DEFAULT_GROUP

 nacos-provider(生产者)pom.xml添加web依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>

启动类:

@EnableDiscoveryClient
@SpringBootApplication
public class NacosProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }
}

 controller层:

@Slf4j
@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/say")
    public String say(){
        return "hello word";
    }
}

验证是否加载成功

查看启动日志

 查看nacos服务注册

备注:上班摸鱼写博客被网安逮到了,后面nacos采用本地nacos(效果一样)。

三、Fegin远程调用

1、fegin简介

Feign是Netflix开发的声明式子,模板化的HTTP客户端,Feign可帮助我们更加便捷、优雅地调用HTTP API。

优点

Feign可以做到使用http请求远程服务时就行调用本地方法一样。

2、服务创建

创建子模块nacos-customer(生产者)

创建过程跟nacos-provider(生产者)一样

目录结构如下:

nacosDemo服务pom.xml添加openfeign依赖

<!--feign依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>${spring-cloud-starter.version}</version>
    <type>pom</type>
</dependency>

nacos-customer(生产者)pom.xml添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--客户端负载均衡器(未配置则项目无法启动)-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-loadbalancer</artifactId>
        <version>4.0.4</version>
    </dependency>
</dependencies>

 nacos-customer(生产者)application.yml

spring:
  # 服务名称
  application:
    name: nacos-customer
  # nacos配置
  config:
    # cloud大于2021.0.4使用下面  nacos:DataId
    import: nacos:nacos-customer.yml
  cloud:
    nacos:
      username: nacos
      password: nacos
      # nacos地址 ip:端口
      server-addr: localhost:8848
      # 服务注册
      discovery:
        # 命名空间
        namespace: 48ce0ee5-b942-4c7e-963a-0c44e4e6a555
        # 组(默认分组可不填)
        group: DEFAULT_GROUP
      # 配置中心
      config:
        # 命名空间
        namespace: 48ce0ee5-b942-4c7e-963a-0c44e4e6a555
        # 组(默认分组可不填)
        group: DEFAULT_GROUP

 nacos-customer(生产者)启动类

//feign客户端加载
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class NacosCustomerApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosCustomerApplication.class,args);
    }
}

nacos-customer(生产者) feignConfig类

@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

nacos-customer(生产者) feign接口类

/**
 * value 你要远程连接nacos中注册服务名称
 * path 具体路径
 */
@FeignClient(value = "nacos-provider",path = "/hello")
public interface HelloService {

    @GetMapping("/say")
    String say();
}

nacos-customer(生产者) controller类

@RestController
@RequestMapping("/customer")
public class HelloController {

    @Resource
    HelloService helloService;

    @GetMapping("/say")
    public String say(){
        System.out.println(helloService.say());
        return "helloService.say()";
    }
}

验证:启动nacos-provider和nacos-customer->>postman访问nacos-customer接口/idea自带请求接口访问

结果:

 四、Sentinel接口管理

1、sentinel简介

Sentinel 具有以下特征:

  • 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等
  • 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况
  • 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel
  • 完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等

2、sentinel安装

官网下载icon-default.png?t=N7T8https://github.com/alibaba/Sentinel/releases

 (1)、sentinel启动

java -jar sentinel-dashboard-2.0.0-alpha-preview.jar

(2)、登录

浏览器输入:localhost:8080,即可访问

账号:sentinel 密码:sentinel

3、项目整合

nacosDemo项目 pom文件添加sentinel版本+依赖

<sentinel.flow.control>2.0.0-alpha</sentinel.flow.control>
<dependencies>
    <!--sentinel数据监控+熔断-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
    </dependency>
    <!--sentinel 热点-->
    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-parameter-flow-control</artifactId>
        <version>${sentinel.flow.control}</version>
    </dependency>
</dependencies>

nacos-provider(生产者) application.yml添加sentinel配置

spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080

 验证:启动nacos-provider(生产者)->>访问/hello/say ->>登录sentinel查看接口

注:访问接口后sentinel显示相应信息。

结果:

 这样就安装成功。

具体使用请看下面文章

SpringCloud Alibaba Sentinel(史上最详细)_spring-cloud-starter-alibaba-sentinel_xhnb的博客-CSDN博客Sentinel: 分布式系统的流量防卫兵一.Sentinel简介二.Sentinel安装与使用1.下载2.启动3.登录4.初始化演示工程三.Sentinel规则1.流控规则1.1 流控模式①直接②关联③链路1.2 流控效果①快速失败②Warm Up③排队等待2.降级规则2.1 RT(平均响应时间)2.2 异常比例2.3 异常数3.热点key规则4.系统规则四.@SentinelResource注解的详细使用1.按资源名称限流+后续处理2.按照Url地址限流+后续处理3.客户自定义限流处理逻辑五.服务熔断功_spring-cloud-starter-alibaba-sentinelhttps://blog.csdn.net/weixin_44757206/article/details/107119085

五、getway网关

1、网关简介

        所谓的网关就是指系统的统一入口,它封装了运用程序的内部结构,为客户端提供统一的服务,一些与业务功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控、路由转发等。

getway处理流程(简化版)

2、项目整合

创建nacos-gateway(网关)服务

创建过程如nacos-provider(生产者)

nacos-gateway(网关)pom.xml添加依赖

<dependencies>
    <!--cloud gateway-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <version>${spring-cloud-starter.version}</version>
    </dependency>
    <!--cloud gateway 不可缺失,缺失无法通过nacos路由-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-loadbalancer</artifactId>
        <version>${spring-cloud-starter.version}</version>
    </dependency>
</dependencies>

nacos-gateway(网关)application.yml

spring:
  # 服务名称
  application:
    name: nacos-gateway
  # nacos配置
  config:
    # cloud大于2021.0.4使用下面  nacos:DataId
    import: nacos:nacos-gateway.yml
  cloud:
    nacos:
      username: nacos
      password: nacos
      # nacos地址 ip:端口
      server-addr: localhost:8848
      # 服务注册
      discovery:
        # 命名空间
        namespace: 48ce0ee5-b942-4c7e-963a-0c44e4e6a555
        # 组(默认分组可不填)
        group: DEFAULT_GROUP
      # 配置中心
      config:
        # 命名空间
        namespace: 48ce0ee5-b942-4c7e-963a-0c44e4e6a555
        # 组(默认分组可不填)
        group: DEFAULT_GROUP

nacos-gateway(网关)启动类

@EnableDiscoveryClient
@SpringBootApplication
public class NacosGateway {
    public static void main(String[] args) {
        SpringApplication.run(NacosGateway.class,args);
    }
}

nacos-gateway(网关)全局过滤器

/**
 * 全局过滤处理
 */
@Component
public class LogGlobalFilter implements GlobalFilter, Ordered {

    @SneakyThrows
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //获取属性中的某个字段
//        String token = exchange.getRequest().getQueryParams().getFirst("token");
        System.out.println("全局过滤保护中....");
        //放行
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        //全局过滤器优先级 值越小优先级越高
        return 0;
    }
}

验证:启动三个服务(生产者、消费者、网关)->>访问网关接口/customer/say

结果:

网关断言规则:

          predicates:
            - Path=/hello/**  # 指定路径访问
            - After=2023-09-06-15T15:12:13.026+08:00[Asia/Shanghai] # 在此时间之后生效
            - Before=2023-09-06-15T15:12:13.026+08:00[Asia/Shanghai] # 在此时间之前生效
            - Between=2023-09-06-15T15:12:13.026+08:00[Asia/Shanghai],2023-09-06-15T15:12:13.026+08:00[Asia/Shanghai] # 在此时间之间生效
            - Cookie=username,张三 # 只有cookie包含username,且值为张三才生效
            - Header=X-request-Id,\d+ # 包含指定请求头,值为数字
            - Host=**.zhangsan.com # 指定主机访问
            - Method=GET # 指定请求方法访问
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值