content longtext NOT NULL COMMENT ‘content’,

md5 varchar(32) DEFAULT NULL COMMENT ‘md5’,

gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,

gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘修改时间’,

src_user text COMMENT ‘source user’,

src_ip varchar(20) DEFAULT NULL COMMENT ‘source ip’,

app_name varchar(128) DEFAULT NULL,

tenant_id varchar(128) DEFAULT ‘’ COMMENT ‘租户字段’,

c_desc varchar(256) DEFAULT NULL,

c_use varchar(64) DEFAULT NULL,

effect varchar(64) DEFAULT NULL,

type varchar(64) DEFAULT NULL,

c_schema text,

PRIMARY KEY (id),

  • 修改配置文件

cd nacos/conf

编辑配置文件

vim application.properties

#*************** Spring Boot Related Configurations ***************#

Default web context path:

server.servlet.contextPath=/nacos

Default web server port:

server.port=8848

#*************** Network Related Configurations ***************#

If prefer hostname over ip for Nacos server addresses in cluster.conf:

nacos.inetutils.prefer-hostname-over-ip=false

Specify local server’s IP:

nacos.inetutils.ip-address=

#*************** Config Module Related Configurations ***************#

If use MySQL as datasource:

spring.datasource.platform=mysql

Count of DB:

db.num=1

Connect URL of DB:

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC

db.user=root

db.password=root

  • 运行nacos

cd nacos/bin

单机运行

sh startup.sh -m standalone

  • 登录nacos控制台 

3.2 建立微服务并向Nacos注册服务

  • 建立微服务工程项目 

  • 勾选Nacos Service Discovery依赖 

  • 打开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”>

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.2.9.RELEASE

nacos.democonsumer

sentinel

0.0.1-SNAPSHOT

sentinel

Demo project for Spring Boot

<java.version>1.8</java.version>

<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>

org.springframework.boot

spring-boot-starter-web

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

com.alibaba.cloud

spring-cloud-alibaba-dependencies

${spring-cloud-alibaba.version}

pom

import

org.springframework.boot

spring-boot-maven-plugin

  • 设置项目配置文件:application.yml

端口

server:

port: 8083

spring:

application:

name: goods-service

cloud:

nacos服务注册

nacos:

discovery:

server-addr: 172.16.109.118:8848

  • 通过 Spring Cloud Alibaba原生注解 @EnableDiscoveryClient 开启服务注册发现功能

// 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能

@EnableDiscoveryClient

@SpringBootApplication

public class DemoServiceApplication {

public static void main(String[] args) {

SpringApplication.run(DemoServiceApplication.class, args);

}

}

  • 建立HTTP接口的商品信息微服务,模拟返回商品列表

/**

  • 商品信息微服务-模拟返回商品列表

*/

@RestController

@RequestMapping(“api/goods”)

public class GoodsService {

public static final Logger logger = LoggerFactory.getLogger(GoodsService.class);

// 返回商品列表

@GetMapping

public List getAllGoods(HttpServletRequest httpServletRequest) {

List goods = new ArrayList<>();

goods.add(new Goods(“电脑”, 10));

goods.add(new Goods(“手机”, 20));

goods.add(new Goods(“书籍”, 30));

logger.info(“服务被调用:”+httpServletRequest.getRequestURI());

return goods;

}

}

  • 启动微服务程序 

  • 查看Nacos控制台的服务中心列表,可以看到商品信息微服务已在Nacos注册成功 

3.3 建立微服务消费者进行服务调用

  • 仿照以上3.2小节建立微服务提供者步骤,建立服务消费者工程项目;

  • 打开pom.xml,下载依赖

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

  • 项目配置:application.yml

端口

server:

port: 8090

Spring配置

spring:

application:

name: user-consumer

cloud:

nacos:

discovery:

server-addr: 172.16.109.118:8848

enabled: true

调用微服务超时时间设置

ribbon:

ConnectTimeout: 5000

ReadTimeout: 5000

feign日志以什么级别监控哪个接口

logging:

level:

nacos.democonsumer.GoodService : debug

商品微服务地址

service:

url=http://goods-service/

  • 通过 Spring Cloud Alibaba原生注解 @EnableDiscoveryClient 开启服务发现功能,并向Spring注册一个RestTemplate Bean

@EnableDiscoveryClient

@SpringBootApplication

public class DemoConsumerApplication {

// 向Spring注册一个RestTemplate Bean

@Bean

// 负载均衡

@LoadBalanced

RestTemplate restTemplate(){

return new RestTemplate();

}

public static void main(String[] args) {

SpringApplication.run(DemoConsumerApplication.class, args);

}

}

  • 创建Restful测试接口,通过该测试接口可发现并调用Nacos中注册的商品信息微服务

/**

  • 用户消费者–调用nacos服务中心的商品信息微服务,并对外提供RestFul接口测试

*/

@RestController

@RequestMapping(“user/”)

public class UserConsumer {

@Autowired

private RestTemplate restTemplate;

@Value("${service.url}")

private String url;

@GetMapping("/goods")

public User getUserGoods() {

User user = new User();

// 调用商品微服务

Object response = restTemplate.getForEntity(url + “api/goods”, Object.class).getBody();

try {

user.setName(“jack”);

user.setGoods((List) response);

} catch (Exception e){

throw new RuntimeException(e.getMessage());

}

return user;

}

}

  • 运行服务消费者程序,并打开HttpClient工具进行测试 

3.4 Nacos小结

  • Spring Cloud Alibaba 的Nacos组件可以完美取代Eureka做为微服务发现及注册的基础框架。

  • 通过Nacos特性大图中,我们还可以了解到,Nacos除了服务发现的框架,还能做到配置管理,DNS服务等功能。 

四、Sentinel的基础实践


4.1 安装Sentinel监控

  • 通过https://github.com/alibaba/Sentinel/releases下载jar包

下载服务端

wget https://github.com/alibaba/Sentinel/releases/download/v1.8.0/sentinel- dashboard-1.8.0.jar

启动服务(默认端口为8080)

java -jar sentinel-dashboard-1.8.0.jar

  • 登录控制台,默认用户名与密码为sentinel 

4.2 通过Sentinel对微服务提供方进行流量控制

  • 对原有商品信息微服务提供者增加Sentinel依赖

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

  • 修改项目配置文件application.yml增加Sentinel控制台地址

server:

port: 8083

spring:

application:

name: goods-service

cloud:

nacos服务注册

nacos:

discovery:

server-addr: 172.16.109.118:8848

sentinel服务

sentinel:

transport:

dashboard: 172.16.109.118:8080

  • 运行微服务程序,通过Nacos控制台观察微服务注册信息 

  • 我们再通过HttpClient工具访问一下微服务的Api端口,并进入Sentinel控制台进行监控:在控制台中,我们发现了服务名称,及该服务下的各种规则设置菜单。 

4.2.1 通过JMeter模拟高并发流量

  • 设置20000个并发请求 

  • 设置HTTP请求地址: 

  • 设置报告输出 

  • 启动JMeter,观察Sentinel控制台,可以看到QPS的实时状况。 

4.2.2 设置流控规则进行流量控制

  • 对Sentinel控制台中服务的资源增加流量控制规则 

  • 给微服务接口的QPS设置阈值 

  • 再次启动JMeter进行高并发测试,在控制台中进行观察,可以看到服务接口的QPS被限制在阈值以下。 ![](https://img-blog.csdnimg.c

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

n/img_convert/de11444beb222cbe4d6a0efd8e011584.png)

  • JMeter结果列表中可以观察到异常信息。 

4.2.3 设置降级规则进行流量控制

  • 对Sentinel控制台中服务的资源增加熔断降级规则 

慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。 

  • 在实时监控界面可以看到请求被拒绝,证明熔断降级规则生效 

  • 在JMeter结果表格中也出现了大量失败的调用请求 

4.3 通过Sentinel对微服务调用方进行流量控制

  • Sentinel流程控制组件除了可以在微服务端进行必要的流量控制外,也可以在服务调用方的客户端进行控。,

  • 微服务调用方加入OpenFeign组件

<-- pom.xml -->

org.springframework.cloud

spring-cloud-starter-openfeign

2.2.5.RELEASE

  • 项目配置

server:

port: 8090

spring:

application:

name: user-consumer

cloud:

nacos:

discovery:

server-addr: 172.16.109.118:8848

sentinel服务

sentinel:

transport:

Spring Cloud Alibaba 微服务生态基础实践,线程池的底层原理相关推荐

  1. Spring Cloud Alibaba 微服务开发实践

    作者:禅与计算机程序设计艺术 1.简介 Spring Cloud Alibaba 是阿里巴巴开源的基于 Spring Cloud 的微服务框架.该项目从最初孵化到现在已经历经十多年的发展,得到了广泛的 ...

  2. 防止内卷和被潜规则,Spring Cloud Alibaba微服务架构实战派(上下册)|35岁程序员那些事

    目录 1 写书缘由 2 本书上册核心内容 2.1 Spring Cloud Alibaba基础实战 2.1.1 主要内容 2.1.2 MyBatis-Plus实现多租户架构的核心原理 2.2 分布式服 ...

  3. 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (中)

    本文承接上文<从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (上)> ...

  4. 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内

    背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...

  5. Spring Cloud Alibaba微服务项目中集成Redis实现分布式事务锁实践

    引言 我们知道同一个进程里面为了解决资源共享而不出现高并发的问题可以通过高并发编程解决,通过给变量添加volatile关键字实现线程间变量可见:通过synchronized关键字修饰代码块.对象或者方 ...

  6. Spring Cloud Alibaba 微服务详细笔记

    文章目录 SpringCloud 一.微服务概述 1.1.什么是微服务? 1.2.为什么是微服务? 1.3.架构演变 1.4.微服务的解决方案 二.什么是SpringCloud 2.1.官方定义 2. ...

  7. Spring Cloud Alibaba微服务组件快速上手

    文章目录 Nacos 什么是Nacos Nacos的启动 将项目注册到Nacos 项目pom依赖 yaml配置 Nacos心跳机制 Dubbo 什么是RPC 什么是Dubbo Dubbo服务的注册与发 ...

  8. 开源,阿里内部Spring Cloud Alibaba微服务神仙文档(全彩版)

    Spring Cloud Alibaba概述 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring C ...

  9. 基于Spring Cloud的微服务架构脚手架实践

    文章目录 1 前言 2 脚手架主要提供哪些功能 3 如何使用该脚手架 3.1 项目统一依赖管理 3.2 集成基础模块功能到自己的项目中 4 基础核心功能模块的使用 4.1 集成缓存管理模块 4.1.1 ...

最新文章

  1. 图片怎么优化的8个小技巧
  2. 行内块元素有哪些标签_html的行内元素与块级元素总结
  3. 《零基础》MySQL LIKE 子句(十六)
  4. devops 技术_在DevOps时代雇用技术作家
  5. Oracle远程连接
  6. 统计学习方法(—)——统计学习方法概念
  7. python基础知识-python基础知识,python必背内容,一、python的基
  8. LeetCode--026--删除排序数组中的重复项(java)
  9. asp.net 域名注册查询接口 支持批量后缀查询
  10. linux给变量加单引号,grep中加单引号与不加引号的区别
  11. ServiceNow获得FedRAMP高基准授权
  12. UE4人物冲刺瞬移多段跳
  13. 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发
  14. js牛客网、赛码网输入输出
  15. java打字训练课程设计_JavaFX+Java打字练习软件(布局篇)
  16. Unity3D基本入门及功能介绍
  17. 网页动态背景——随鼠标变换的动态线条(鼠标蜘蛛网特效)
  18. 图码详解算法|理解八大思想,胜刷百道力扣!
  19. YOLO(You Only Look Once)算法详解
  20. java上机实验作业 编写汽车类car_JAVA第十四次上机作业

热门文章

  1. docker-compose 2.10.2 解决transport: Error while dialing unable to upgrade to h2c, received 404报错
  2. Istio 1.12 引入 Wasm 插件配置 API 以扩展 Istio 生态
  3. 实用技巧:Win11自带截屏、录屏功能
  4. Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态
  5. 孙禄堂先生对武学的五大贡献之一创立拳与道合的武学思想体系
  6. shader 反射 水面_UnityShader-菲涅尔反射(Fresnel Reflection)
  7. win与iPhone/ipad共享文件夹,用本地账户/微软账户提示账户无效解决办法
  8. 微信小程序腾讯地图自定样式真机不生效
  9. 摆脱枯燥的文字描述——markdown表情包黑科技
  10. Redis是单线程的,为什么还会这么快?