【微服务】OpenFeign+Sentinel集中处理远程调用异常
文章目录
- 1.微服务基本环境调整
- 1.对10004模块的application.yml调整
- 2.启动nacos以及一个消费者两个提供者
- 3.测试
- 1.输入http://localhost:8848/nacos/index.html 来查看注册情况
- 2.浏览器访问 http://localhost:81/member/nacos/consumer/get/1
- 3.结果
- 2.使用OpenFeign实现微服务模块间的远程调用
- 1.消费者的pom.xml,引入OpenFeign和Nacos的服务发现
- 2.消费者的application.yml(配置nacos服务注册)
- 3.消费者的启动类(开启nacos的服务发现,以及启动OpenFeign)
- 4.com/sun/springcloud/service/MemberOpenfeignService.java 编写与远程调用的方法匹配的接口
- 1.将要远程调用的方法整个复制到这个接口,然后去掉方法体
- 2.在接口上添加@FeignClient注解,指定远程调用的服务在nacos中的名字
- 5.编写一个controller进行远程调用
- 1.创建一个MemberOpenFeignController的controller并将要远程调用的controller上面的注解复制过来(不能改)
- 2.依赖注入刚才编写的远程调用的接口的动态代理对象
- 3.将要远程调用的接口再复制过来,按Tab,使用copilot来自动补全远程调用的代码
- 6.测试
- 1.启动nacos,81模块,10004,10006模块
- 2.访问nacos查看注册情况
- 3.浏览器输入 http://localhost:81/member/openfeign/get/1 (必须加上http:// )
- 7.切换负载均衡算法
- 1.编写配置类,注入一个负载均衡算法的bean
- 2.重新启动,报错,bean已经被定义了,说明之前可能定义了同样id的负载均衡算法的bean
- 3.换一个id即可,然后重新启动
- 4.测试,浏览器访问几次,有时会出现超时的情况(OpenFeign默认超时时间为1s)
- 5.设置超时时间 application.yml
- 1.全局配置
- 2.单个Feign客户端配置
- 6.又检查了一下,远程调用的方法,之前设置了休眠时间,删除即可。。。
- 3.服务消费者整合Sentinel进行服务保护
- 1.pom.xml引入Sentinel
- 2.application.yml 配置Sentinel的客户端和服务端
- 3.测试
- 1.启动nacos,sentinel
- 2.启动81,10004,10006模块
- 3.浏览器输入http://localhost:8080/ 进入Sentinel的服务端
- 4.浏览器输入http://192.168.137.1:8848/nacos/index.html进入nacos查看注册情况
- 5.浏览器访问 http://localhost:81/member/openfeign/get/1 然后查看Sentinel控制台
- 4.需求分析
- 5.开始配置之前进行测试
- 当10004和10006都down掉时,不断请求会发生什么?
- 1.首先关闭10004和10006微服务
- 2.浏览器发送请求 http://localhost:81/member/openfeign/get/1,发现是超时
- 3.浏览器发送请求 http://localhost:81/member/openfeign/get/1, 可以发现服务不可用
- 6. 81模块配置如果远程调用的服务出现异常,则立即返回结果
- 1.MemberFeignFallbackService.java 实现 MemberOpenfeignService.java 并注入容器
- 2.在application.yml配置启用openfeign和sentinel的整合
- 3.MemberOpenfeignService 添加fallback属性,指定出现异常要处理的类
- 4.重新启动81模块,浏览器输入 http://localhost:81/member/openfeign/get/1测试
- 5.关闭10004和10006,再次进行测试,成功处理异常!
- 4.消费者使用OpenFeign整合Sentinel进行服务保护小结
- 1.服务消费者OpenFeign远程调用流程
- 1.配置Nacos的服务发现和服务注册功能
- 2.配置OpenFeign远程调用
- 1.pom.xml引入OpenFeign依赖
- 2.编写service接口存放服务发现和资源路径的信息
- 3.编写controller进行远程调用
- 2.整合Sentinel进行服务保护流程
- 1.配置Sentinel监控服务
- 2.配置OpenFeign整合Sentinel,使得远程调用出现异常集中处理
- 3.服务消费者OpenFeign远程调用整合Sentinel进行服务保护原理
- 4.Sentinel仍然可以对这个controller进行流量控制,熔断降级,热点限流
- 设置QPS为1
- 5.规则持久化
- 1.规则持久化方案
- 2.规则持久化原理
- 3.需求分析
- 4.具体配置
- 1.在Nacos配置中心增加Sentinel的流控规则
- 2.pom.xml引入nacos和sentinel持久化的依赖
- 3.application.yml 拉取Nacos的配置信息并同步到Sentinel
- 4.测试
- 1.启动Nacos、Sentinel、81、10004、10006
- 2.查看Nacos注册情况
- 3.浏览器快速请求 http://localhost:81/member/openfeign/get/1, 流控规则生效!
- 4.查看同步到Sentinel的流控规则
- 5.其他规则配置
1.微服务基本环境调整
1.对10004模块的application.yml调整
2.启动nacos以及一个消费者两个提供者
目前的消费者是Ribbon+restTemplate形式进行远程调用的
3.测试
1.输入http://localhost:8848/nacos/index.html 来查看注册情况
2.浏览器访问 http://localhost:81/member/nacos/consumer/get/1
3.结果
2.使用OpenFeign实现微服务模块间的远程调用
1.消费者的pom.xml,引入OpenFeign和Nacos的服务发现
<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.example</groupId><artifactId>e-commerce-center</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>member-service-nacos-consumer-81</artifactId><name>Archetype - member-service-nacos-consumer-81</name><url>http://maven.apache.org</url><dependencies><!-- 引入openfeign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--引入nacos的服务发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-nacos-discovery</artifactId></dependency><!-- springboot web starter 用来监听端口--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 如果在子工程/模块指定了 version,则以指定为准 --></dependency><!--1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息等2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. --><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 公共模块的jar包 --><dependency><groupId>org.example</groupId><artifactId>e_commerce_center-common-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>
2.消费者的application.yml(配置nacos服务注册)
server:port: 81
spring:application:name: member-service-nacos-consumer-81
# 配置nacos的服务注册cloud:nacos:discovery:server-addr: localhost:8848 # 配置要注册到的nacos地址,根据实际情况填写
3.消费者的启动类(开启nacos的服务发现,以及启动OpenFeign)
package com.sun.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;/*** @author 孙显圣* @version 1.0*/
@SpringBootApplication // springboot启动类
@EnableDiscoveryClient // 开启nacos服务发现
@EnableFeignClients // 开启feign远程调用
public class MemberNacosCostomerApplication81 {public static void main(String[] args) {SpringApplication.run(MemberNacosCostomerApplication81.class, args);}
}
4.com/sun/springcloud/service/MemberOpenfeignService.java 编写与远程调用的方法匹配的接口
1.将要远程调用的方法整个复制到这个接口,然后去掉方法体
package com.sun.springcloud.service;import com.sun.springcloud.util.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;/*** Description:** @Author sun* @Create 2024/3/30 10:39* @Version 1.0*/
public interface MemberOpenfeignService {/*** 根据id来获取某个会员的信息** @param id 使用路径参数的形式传入参数* @return 返回json格式的数据*/@GetMapping("/memberget/{id}") // 这里使用的路径参数public Result getMemberById(@PathVariable("id") Long id);
}
2.在接口上添加@FeignClient注解,指定远程调用的服务在nacos中的名字
- 这样这个接口中就具备了所有远程调用微服务的信息
- 后面在注入的时候就会注入针对这个接口的代理对象,远程调用方法的时候通过@FeignClient注解中的信息进行服务发现ip + 端口 + 上下文路径,并在前面加上http://,最后再拼接上这个@GetMapping注解中的资源路径,完成远程调用
- 简单来说,这个接口需要包含要远程调用的服务发现和资源路径的信息,这样才能够进行远程调用
package com.sun.springcloud.service;import com.sun.springcloud.util.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;/*** Description:** @Author sun* @Create 2024/3/30 10:39* @Version 1.0*/
@FeignClient("member-service-nacos-provider") // 会进行服务的发现,发现服务的ip+端口+上下文路径
public interface MemberOpenfeignService {/*** 根据id来获取某个会员的信息** @param id 使用路径参数的形式传入参数* @return 返回json格式的数据*/@GetMapping("/member/get/{id}") // 这里使用的路径参数public Result getMemberById(@PathVariable("id") Long id);
}
5.编写一个controller进行远程调用
1.创建一个MemberOpenFeignController的controller并将要远程调用的controller上面的注解复制过来(不能改)
package com.sun.springcloud.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;/*** Description:** @Author sun* @Create 2024/3/30 10:53* @Version 1.0*/
// 这两个注解是要远程调用的controller的注解
@RestController
@Slf4j
public class MemberOpenFeignController {
}
2.依赖注入刚才编写的远程调用的接口的动态代理对象
package com.sun.springcloud.controller;import com.sun.springcloud.service.MemberOpenfeignService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** Description:** @Author sun* @Create 2024/3/30 10:53* @Version 1.0*/
// 这两个注解是要远程调用的controller的注解
@RestController
@Slf4j
public class MemberOpenFeignController {@Resourceprivate MemberOpenfeignService memberOpenFeignService; // 注入远程调用的接口
}
3.将要远程调用的接口再复制过来,按Tab,使用copilot来自动补全远程调用的代码
- 这里的url,方法名,参数,都是可以修改的
- 传入getMemberById的参数必须符合这个controller的要求
- getMemberById的返回类型也要匹配,比如这里就必须使用@RestController
- 牢记接口三要素 url 参数 返回值
- 建议:如果只是想要远程调用一下的话,就没必要修改了,直接粘贴过来远程调用即可
package com.sun.springcloud.controller;import com.sun.springcloud.service.MemberOpenfeignService;
import com.sun.springcloud.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** Description:** @Author sun* @Create 2024/3/30 10:53* @Version 1.0*/
// 这两个注解是要远程调用的controller的注解
@RestController
@Slf4j
public class MemberOpenFeignController {@Resourceprivate MemberOpenfeignService memberOpenFeignService; // 注入远程调用的接口/*** 根据id来获取某个会员的信息** @param id 使用路径参数的形式传入参数* @return 返回json格式的数据*/@GetMapping("/member/openfeign/get/{id}") // 1.这里的url是可以改的public Result getMemberById(@PathVariable("id") Long id) { // 2.这里的参数和方法名是可以改的// 远程调用member-service-nacos-provider的getMemberById方法return memberOpenFeignService.getMemberById(id); // 这里的参数和返回值是要远程调用的接口的参数和返回值}
}
6.测试
1.启动nacos,81模块,10004,10006模块
2.访问nacos查看注册情况
3.浏览器输入 http://localhost:81/member/openfeign/get/1 (必须加上http:// )
7.切换负载均衡算法
1.编写配置类,注入一个负载均衡算法的bean
package com.sun.springcloud.config;import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/** 配置类,用于配置Ribbon的负载均衡策略* @author 孙显圣* @version 1.0*/
@Configuration
public class RibbonRule {@Beanpublic IRule ribbonRule() {// 随机策略return new RandomRule();}
}
2.重新启动,报错,bean已经被定义了,说明之前可能定义了同样id的负载均衡算法的bean
3.换一个id即可,然后重新启动
4.测试,浏览器访问几次,有时会出现超时的情况(OpenFeign默认超时时间为1s)
5.设置超时时间 application.yml
1.全局配置
feign:client:config:default:connectTimeout: 5000readTimeout: 10000
2.单个Feign客户端配置
feign:client:config:客户端的application-name:connectTimeout: 5000readTimeout: 10000
6.又检查了一下,远程调用的方法,之前设置了休眠时间,删除即可。。。
3.服务消费者整合Sentinel进行服务保护
1.pom.xml引入Sentinel
<!-- 引入Sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
2.application.yml 配置Sentinel的客户端和服务端
sentinel:transport:dashboard: localhost:8080 # 配置sentinel服务端的地址,根据实际情况填写 port: 8719 # 配置sentinel客户端的端口,根据实际情况填写,如果冲突,会自动+1,直到找到可用的端口
3.测试
1.启动nacos,sentinel
2.启动81,10004,10006模块
3.浏览器输入http://localhost:8080/ 进入Sentinel的服务端
4.浏览器输入http://192.168.137.1:8848/nacos/index.html进入nacos查看注册情况
5.浏览器访问 http://localhost:81/member/openfeign/get/1 然后查看Sentinel控制台
4.需求分析
5.开始配置之前进行测试
当10004和10006都down掉时,不断请求会发生什么?
1.首先关闭10004和10006微服务
2.浏览器发送请求 http://localhost:81/member/openfeign/get/1,发现是超时
- 原因是OpenFeign会根据接口的信息来通过服务发现和资源路径,找到要远程调用的接口,并缓存在本地,所以只要缓存还在,就不会是服务不可用
3.浏览器发送请求 http://localhost:81/member/openfeign/get/1, 可以发现服务不可用
- 此时的缓存已经不在,OpenFeign重新从nacos获取服务信息,但是获取不到所以会出现服务不可用的错误
6. 81模块配置如果远程调用的服务出现异常,则立即返回结果
1.MemberFeignFallbackService.java 实现 MemberOpenfeignService.java 并注入容器
package com.sun.springcloud.service;import com.sun.springcloud.util.Result;
import org.springframework.stereotype.Component;/*** Description: 会员服务的降级处理, 当服务不可用时,立即返回一个默认的结果** @Author sun* @Create 2024/3/30 14:32* @Version 1.0*/
@Component // 注入到spring容器中
public class MemberFeignFallbackService implements MemberOpenfeignService{@Overridepublic Result getMemberById(Long id) {return Result.error("503", "服务降级返回, 服务不可用");}
}
2.在application.yml配置启用openfeign和sentinel的整合
# 配置openfeign和sentinel的整合
feign:sentinel:enabled: true
3.MemberOpenfeignService 添加fallback属性,指定出现异常要处理的类
4.重新启动81模块,浏览器输入 http://localhost:81/member/openfeign/get/1测试
5.关闭10004和10006,再次进行测试,成功处理异常!
4.消费者使用OpenFeign整合Sentinel进行服务保护小结
1.服务消费者OpenFeign远程调用流程
1.配置Nacos的服务发现和服务注册功能
- 服务发现:配置pom.xml,和启动类开启服务发现的注解
- 服务注册:配置application.yml
2.配置OpenFeign远程调用
1.pom.xml引入OpenFeign依赖
2.编写service接口存放服务发现和资源路径的信息
- 将要远程调用的方法整个复制到这个接口,然后去掉方法体
- 在接口上添加@FeignClient注解,指定远程调用的服务在nacos中的名字
3.编写controller进行远程调用
- 将要远程调用的controller上面的注解复制过来(不能改)
- 依赖注入刚才编写的远程调用的接口的动态代理对象
- 将要远程调用的接口再复制过来去掉方法体,按Tab,使用copilot来自动补全远程调用的代码
2.整合Sentinel进行服务保护流程
1.配置Sentinel监控服务
- pom.xml引入Sentinel依赖
- application.yml 配置Sentinel的客户端和服务端
2.配置OpenFeign整合Sentinel,使得远程调用出现异常集中处理
- 编写一个类实现存放服务发现和资源路径的信息的service,并实现其方法,然后注入容器
- 在application.yml配置启用openfeign和sentinel的整合
- 在service中的@FeignClient注解,添加fallback属性,指定出现处理异常的类
3.服务消费者OpenFeign远程调用整合Sentinel进行服务保护原理
4.Sentinel仍然可以对这个controller进行流量控制,熔断降级,热点限流
设置QPS为1
5.规则持久化
1.规则持久化方案
2.规则持久化原理
- 简单来说就是在Nacos配置Sentinel的规则
- 然后在通过Sentinel监控的微服务通过底层通信,同步到Sentinel上
3.需求分析
4.具体配置
1.在Nacos配置中心增加Sentinel的流控规则
2.pom.xml引入nacos和sentinel持久化的依赖
<!-- 引入nacos和sentinel持久化的依赖 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency>
3.application.yml 拉取Nacos的配置信息并同步到Sentinel
datasource:ds1: # 从Nacos中读取sentinel的规则配置nacos:server-addr: localhost:8848 # 配置要注册到的nacos地址,根据实际情况填写dataId: member-service-nacos-consumer-81 # 配置要读取的配置的dataIdgroupId: DEFAULT_GROUP # 配置要读取的配置的groupIddata-type: json # 配置要读取的配置的类型rule-type: flow # 配置要读取的配置的规则类型为流控规则
4.测试
1.启动Nacos、Sentinel、81、10004、10006
2.查看Nacos注册情况
3.浏览器快速请求 http://localhost:81/member/openfeign/get/1, 流控规则生效!
4.查看同步到Sentinel的流控规则
5.其他规则配置
官方文档
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/1ba120e0b8da6f61183767be446b1566.png)
【微服务】OpenFeign+Sentinel集中处理远程调用异常
文章目录 1.微服务基本环境调整1.对10004模块的application.yml调整2.启动nacos以及一个消费者两个提供者3.测试1.输入http://localhost:8848/nacos/index.html 来查看注册情况2.浏览器访问 http://localhost:81/member/nacos/consumer/get/13.结果 2.使用OpenFeign实现微服务模…...
![](https://img-blog.csdnimg.cn/img_convert/5b4d314f672491ebe10dc0c66bc72f40.png)
集合嵌套,Collections,斗地主案例,日志框架
文章目录 集合嵌套List嵌套ListList嵌套MapMap嵌套Map Collections类方法排序 sort 乱序 shuffle 斗地主案例需求思路代码 日志框架介绍优势体系结构Logback概述快速入门配置详解 集合嵌套 List嵌套List public static void main(String[] args){//一个年级有许多班级…...
![](https://www.ngui.cc/images/no-images.jpg)
maven pom relativePath属性的作用
maven pom relativePath属性的作用 文章目录 maven pom relativePath属性的作用一、relativePath出现的地方二、relativePath默认值三、四、<relativePath>一个pom路径 一、relativePath出现的地方 搭建maven项目,子模块指定父模块试,经常会在par…...
![](https://img-blog.csdnimg.cn/direct/e3ce972a91424791a4c9d7cb79e091b2.png)
【STM32 HAL库SPI/QSPI协议学习,基于外部Flash读取。】
1、SPI协议 简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率 较高的场合。 SPI 物理层 SPI 通讯…...
![](https://www.ngui.cc/images/no-images.jpg)
Nginx入门--初识Nginx的架构
一、概述 Nginx的架构设计旨在高效处理并发的网络请求。它采用了事件驱动的、非阻塞的IO模型,可以同时处理成千上万个并发连接,而不会消耗太多的系统资源。 二、主要组件 Nginx的主要组件包括: Master Process(主进程…...
![](https://img-blog.csdnimg.cn/direct/82240ffbd69a4ab2a54c82941aa9fa4e.png#pic_center)
网络性能提升10%,ZStack Edge 云原生超融合基于第四代英特尔®至强®可扩展处理器解决方案发布
随着业务模式的逐渐转变、业务架构逐渐变得复杂,同时容器技术的兴起和逐渐成熟,使得Kubernetes、微服务等新潮技术逐步应用于业务应用系统上。 为了充分释放性能、为业务系统提供更高效的运行环境,ZStack Edge 云原生超融合采用了第四代英特尔…...
![](https://img-blog.csdnimg.cn/img_convert/10e64f99a29431c549a8f02cb2f82d6c.webp?x-oss-process=image/format,png)
双非计算机考研目标211,选11408还是22408更稳?
求稳得话,11408比22408要稳! 很多同学只知道,11408和22408在考察的科目上有区别,比如: 11408考的是考研数学一和英语一,22408考察的是考研数学二和英语二: 考研数学一和考研数学二的区别大吗…...
![](https://img-blog.csdnimg.cn/img_convert/5800f5b3b6fdeb61457c3a2c8816919a.png)
简单了解策略模式
什么是策略模式? 策略模式提供生成某一种产品的不同方式 Strategy策略类定义了某个各种算法的公共方法,不同的算法类通过继承Strategy策略类,实现自己的算法 Context的作用是减少客户端和Strategy策略类之间的耦合,客户端只需要…...
![](https://www.ngui.cc/images/no-images.jpg)
算法——运动模型
智能驾驶中常用的速度计算算法包括基于GPS的速度计算、惯性测量单元(IMU)的速度计算、雷达测距的速度计算、视觉测距的速度计算等。这些算法可以单独使用或者结合使用,以提高速度计算的准确性和稳定性。 智能驾驶中常用的加速度计算算法包括…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
基于R语言lavaan结构方程模型(SEM)技术应用
结构方程模型(Sructural Equation Modeling,SEM)是分析系统内变量间的相互关系的利器,可通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性,是近年来生态、进化、环境、…...
![](https://img-blog.csdnimg.cn/direct/912eba1c4e2f45929772563040360d80.png)
本地虚拟机服务器修改站点根目录并使用域名访问的简单示例
说明:本文提及效果是使用vmware虚拟机,镜像文件是Rocky8.6 一、配置文件路径 1. /etc/httpd/conf/httpd.conf #主配置文件 2. /etc/httpd/conf.d/*.conf #调用配置文件 调用配置文件的使用: vim /etc/httpd/conf.d/webpage.conf 因为在主配…...
![](https://img-blog.csdnimg.cn/direct/69271d721c9e473485e5dc02c005d47c.png)
生信数据分析——GO+KEGG富集分析
生信数据分析——GOKEGG富集分析 目录 生信数据分析——GOKEGG富集分析1. 富集分析基础知识2. GO富集分析(Rstudio)3. KEGG富集分析(Rstudio) 1. 富集分析基础知识 1.1 为什么要做功能富集分析? 转录组学数据得到的基…...
![](https://img-blog.csdnimg.cn/direct/256c6ed08e3d4e29bd19335acd64261c.png)
微服务(基础篇-007-RabbitMQ)
目录 初识MQ(1) 同步通讯(1.1) 异步通讯(1.2) MQ常见框架(1.3) RabbitMQ快速入门(2) RabbitMQ概述和安装(2.1) 常见消息模型(2.2) 快速入门ÿ…...
![](https://img-blog.csdnimg.cn/direct/e9bdd01563e7481c852379d89e11368f.png)
汇总:五个开源的Three.js项目
Three.js 是一个基于 WebGL 的 JavaScript 库,它提供了一套易于使用的 API 用来在浏览器中创建和显示 3D 图形。通过抽象和简化 WebGL 的复杂性,Three.js 使开发者无需深入了解 WebGL 的详细技术就能够轻松构建和渲染3D场景、模型、动画、粒子系统等。 T…...
![](https://img-blog.csdnimg.cn/direct/9137b586cd1c449cbb2a01ed80b5f737.png)
JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】
一.JavaScript介绍 1.1什么是JavaScript JavaScript简称“js”,js与java没有任何关系。 js是一种“轻量级、解释型、面向对象的脚本语言”。 二.JavaScript的两种导入方式 2.1内联式 在HTML文档中使用<script>标签直接引用。 <script>console.log…...
![](https://img-blog.csdnimg.cn/direct/de6cb4b0027e4cff98628a6c0f0bd873.png)
部署云原生边缘计算平台kubeedge
文章目录 1、kubeedge架构2、基础服务提供 负载均衡器 metallb2.1、开启ipvc模式中的strictARP2.2、部署metalb2.2.1、创建IP地址池2.2.2、开启二层转发,实现在k8s集群节点外访问2.2.3、测试 3、部署cloudcore3.1、部署cloudcore3.2、修改cloudcore的网络类型 4、部…...
![](https://www.ngui.cc/images/no-images.jpg)
Java设计模式:单例模式详解
设计模式:单例详解 文章目录 设计模式:单例详解一、单例模式的原理二、单例模式的实现推荐1、饿汉模式2、静态内部类 三、单例模式的案例四、单例模式的使用场景推荐总结 一、单例模式的原理 单例模式听起来很高大上,但其实它的核心思想很简…...
![](https://www.ngui.cc/images/no-images.jpg)
Qt5.14.2 定时器黑魔法,一键唤醒延时任务
在图形界面程序的世界里,有这么一个需求无处不在:在特定的时间间隔后,执行一段特殊的代码。比如说30秒后自动保存文档、500毫秒后更新UI界面等等。作为资深Qt程序员,我相信各位一定也曾为实现这种"延时任务"而绞尽脑汁。今天&#…...
![](https://img-blog.csdnimg.cn/direct/21d5dad33cef48f4a5109bc7cf7c1034.png)
C++项目——集群聊天服务器项目(九)客户端异常退出业务
服务器端应检测到客户端是否异常退出,因此本节来实现客户端异常退出,项目流程见后文 一、客户端异常退出业务流程 (1)在业务模块定义处理客户端异常退出的函数 (2)集群聊天服务器项目(八)提到…...
![](https://img-blog.csdnimg.cn/direct/19653c2da0364c91bb49e31b055194dc.png#pic_center)
STM32CubeIDE基础学习-HC05蓝牙模块和手机通信
STM32CubeIDE基础学习-HC05蓝牙模块和手机通信 文章目录 STM32CubeIDE基础学习-HC05蓝牙模块和手机通信前言第1章 硬件连接第2章 工程配置第3章 代码编写3.1 手机指令控制LED 第4章 实验现象总结 前言 前面的文章学习了串口通过轮询和中断的简单使用方法,现在就来用…...
![](https://img-blog.csdnimg.cn/direct/1cda611311354a4281a1b5c32c9ec802.png)
npm mongoose包下载冲突解决之道
我在新电脑下载完项目代码后,运行 npm install --registryhttps://registry.npm.taobao.org 1运行就报错: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: lowcode-form-backend1.0.0 npm …...
![](https://img-blog.csdnimg.cn/direct/d0f438b75e3b4695a91c79d659381bfa.png)
26. UE5 RPG同步面板属性(二)
在上一篇,我们解析了UI属性面板的实现步骤: 首先我们需要通过c去实现创建GameplayTag,这样可以在c和UE里同时获取到Tag创建一个DataAsset类,用于设置tag对应的属性和显示内容创建AttributeMenuWidgetController实现对应逻辑 并且…...
![](https://img-blog.csdnimg.cn/direct/9df46c9418f246cd99e54d940414eff4.png#pic_center)
五、postman基础使用案例
postman基础使用 相关案例【传递查询参数】【提交表单数据】【提交JSON数据】 注:postman⼀款⽀持调试和测试的⼯具,开发、测试⼯程师都可以使⽤。方法一般统一为:方法→请求头→请求体→断言 相关案例 【传递查询参数】 访问TPshop搜索商品的…...
![](https://img-blog.csdnimg.cn/img_convert/79ae3764cc6a8af6624d93731f197dc9.png)
Git合并利器:Vimdiff使用指南
使用 vimdiff 作为 Git 的合并工具确实可能会让新手感到困惑,但它是一个功能强大的工具,一旦掌握了它,就可以非常高效地进行代码合并和比较。以下是一个简短的教程,旨在帮助理解 vimdiff 的基本用法以及如何利用它来进行 Git 合并…...
![](https://img-blog.csdnimg.cn/img_convert/bdb31b5a146ebea628294fc9764821b6.jpeg)
阿里云2核4G服务器租用价格_30元3个月_165元一年_199元
阿里云2核4G服务器租用优惠价格,轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月,活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图: 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…...
![](https://img-blog.csdnimg.cn/direct/fd07d6f3cc8e449eb79e2e7ad927378c.png)
<QT基础(2)>QScrollArea使用笔记
项目需要设置单个检查的序列图像预览窗口,采用QScrollArea中加入QWidget窗口,每个窗口里面用Qlabel实现图像预览。 过程涉及两部分内容 引入QWidget 引入label插入图像(resize) 引入布局 组织 scrollArea内部自带Qwidget&#…...
![](https://img-blog.csdnimg.cn/direct/e8da4874282a4237a38ea60a032cfb2e.png)
springboot企业级抽奖项目业务四 (缓存预热)
缓存预热 为什么要做预热: 当活动真正开始时,需要超高的并发访问活动相关信息 必须把必要的数据提前加载进redis 预热的策略: 在msg中写一个定时任务 每分钟扫描一遍card_game表 把(开始时间 > 当前时间)&& (开始时间 < 当前时间1分钟)的活动及相…...
![](https://img-blog.csdnimg.cn/direct/e34974370a83442aadeeb0570ef46583.png)
opejdk11 java 启动流程 java main方法怎么被jvm执行
java启动过程 java main方法怎么被jvm执行 java main方法是怎么被jvm调用的 1、jvm main入口 2、执行JLI_Launch方法 3、执行JVMInit方法 4、执行ContinueInNewThread方法 5、执行CallJavaMainInNewThread方法 6、创建线程执行ThreadJavaMain方法 7、执行ThreadJavaMain方法…...
![](https://img-blog.csdnimg.cn/direct/f5abd5b1fd8e4c8c92ef3a7a9c9a37b4.gif)
link 样式表是否会阻塞页面内容的展示?取决于浏览器,edge 和 chrome 会,但 firefox 不会。
经过实测: 在 head 中 link 一个 1M 大小的样式表。设置网络下载时间大概为 10 秒。 edge 和 chrome 只有在下载完样式表后,页面上才会出现内容。而 firefox 可以直接先显示内容,然后等待样式表下载完成后再应用样式。 DOMContentLoaded 事…...
![](https://img-blog.csdnimg.cn/direct/123ed22f15f6412eb834f779d0bda929.png)
uniapp对接极光推送(国内版以及海外版)
勾选push,但不要勾选unipush 国内版 网址:极光推送-快速集成消息推送功能,提升APP运营效率 (jiguang.cn) 进入后台,并选择对应应用开始配置 配置安卓包名 以及ios推送证书,是否将生产证书用于开发环境选择是 ios推送证书…...
![](/images/no-images.jpg)
我想给别人做网站/网站排名优化专业定制
Hibernate中的一对一映射关系有两种实现方法(单向一对一,和双向一对一)(一对一关系:例如一个department只能有一个manager) 单向和双向有什么区别呢??例如若是单向一对一,比如在depa…...
![](/images/no-images.jpg)
政府网站建设经验交流材料/百度网址收录入口
3.set_difference 功能描述:求两个集合的差集 函数原型set_difference(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest); //求两个集合的差集 //注意:两个集合必须是有序序列 //beg1容器1开始迭代器 //end1容器1结束迭代器 /…...
网站建站系统有哪些/免费网络推广网址
Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲来源丨Tech星球(微信ID:tech618)张小龙对下一个10年的深度思考。Tech星球(微信ID:tech618)演讲者 | 张小龙编者按&…...
![](/images/no-images.jpg)
域名购买哪个网站好/磁力搜索器下载
declare 结构用来设定一段代码的执行指令。declare 的语法和其它流程控制结构相似:declare (directive)statementdirective 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks以及 encoding。Note: encoding 是 PHP 5.3.0 新增指令。declare…...
wordpress获取url/上海牛巨微seo优化
1.安装indicator-sysmonitor add-apt-repository ppa:fossfreedom/indicator-sysmonitor # apt-get update # apt-get install indicator-sysmonitor2.运行indicator 搜索计算机 indicator 点击右键进入preferences 设置 参考: 1.Ubuntu 16.04 标题栏实时显示上…...
![](https://img-blog.csdnimg.cn/0532741d6fa147bea4d11c965f554e05.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3RvbmVfdGlnZXJMSQ==,size_19,color_FFFFFF,t_70,g_se,x_16)
公司网站备案 问我借身份证 怎么拒绝/seo优化技术培训
1、安装N卡驱动 首先添加源 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update然后检查可以安装的驱动版本号 nvidia-msi选择适合自己的驱动,这里需要注意不同版本的cuda需要的驱动版本号也不一样,参考表链接点这里 Ubuntu 18.04安…...