微服务之Eureka服务注册中⼼

关于务注册中⼼服

服务注册中⼼本质上是为了解耦服务提供者和服务消费者,尽可能量使两者联系可控在一定的范围外
1.在父项目下下引入 Spring Cloud 依赖
<dependencyManagement>
<dependencies>
<!-- SCN -->
<dependency>
<groupId> org.springframework.cloud </groupId>
<artifactId> spring-cloud-dependencies </artifactId>
<version> Greenwich.RELEASE </version>
<type> pom </type>
<scope> import </scope>
</dependency>
</dependencies>
</dependencyManagement>
2. 在⽗⼯程【 yx-parent 】的 pom.xml ⽂件中⼿动引⼊ jaxb 的依赖。因为 JDK9 之后默认没有加载该模块,⽽ EurekaServer依赖 jaxb ,所以需要⼿动导⼊,否则 Eureka Server 服务⽆法启动。

<!-- 引⼊ Jaxb 开始 -->
<dependency>
<groupId> com.sun.xml.bind </groupId>
<artifactId> jaxb-core </artifactId>
<version> 2.2.11 </version>
</dependency>
<dependency>
<groupId> javax.xml.bind </groupId>
<artifactId> jaxb-api </artifactId>
</dependency>
<dependency>
<groupId> com.sun.xml.bind </groupId>
<artifactId> jaxb-impl </artifactId>
<version> 2.2.11 </version>
</dependency>
<dependency>
<groupId> org.glassfish.jaxb </groupId>
<artifactId> jaxb-runtime </artifactId>
<version> 2.2.10-b140310.1920 </version>
</dependency>
<dependency>
<groupId> javax.activation </groupId>
<artifactId> activation </artifactId>
<version> 1.1.1 </version>
</dependency>
<!-- 引⼊ Jaxb 结束 -->

3.在父工程创建一个yx-cloud-eureka-9200工程,并引入依赖

<dependencies>
<!-- Eureka Server 依赖 -->
<dependency>
<groupId> org.springframework.cloud </groupId>
<artifactId> spring-cloud-starter-netflix-eureka-server </artifactId>
</dependency>
</dependencies>

4.在创建yx-cloud-eureka-9200的工程下的的resources⽬录下创建application.yml配置⽂件,配置Eureka Server服务端⼝, 服务名等信息。

server:port: 9200  # Eureka Server服务端口
spring:application:name: yx-service-eureka #应用名称,在Eureka中服务的唯一标识id
eureka:client: #Eureka Server本身也是Eureka的一个客户端,因为在集群下需要与其他Eureka Server进行数据的同步service-url:  # 客户端与Eureka Server交互的地址,如果是集群情况下defaultZone设置为集群下其他的Eureka Server地址,多个地址使用","隔开defaultZone: http://YXCloudEurekaServerC:9200/eureka,http://YXCloudEurekaServerD:9201/eurekaregister-with-eureka: true  # 表示是否向Eureka中心注册自己的信息,因为自己就是Eureka Server所以不进行注册,默认为truefetch-registry: true # 是否查询/拉取Eureka Server服务注册列表,默认为trueinstance:#hostname: localhost # 当前Eureka实例的主机名# 使用ip注册,否则会使用主机名注册(此处考虑到对老版本的兼容,新版本经过实验都是ip)prefer-ip-address: true# 自定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address早期版本是ipAddressinstance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
6. com.yx.eureka 包下,创建 EurekaApplication9200 启动类

 @EnableEurekaServer 此注解是申明项目是一个Eureka Server

 微服务注册到Eureka\

1.向服务提供者的项目中添加Eureka Client依赖。

<!-- Eureka Client -->
<dependency>
<groupId> org.springframework.cloud </groupId>
<artifactId> spring-cloud-starter-netflix-eureka-client </artifactId>
</dependency>

2.向消费者的项目的application.yml⽂件中配置Eureka服务端信息

eureka:client: #Eureka Server本身也是Eureka的一个客户端,因为在集群下需要与其他Eureka Server进行数据的同步service-url:  # 客户端与Eureka Server交互的地址,如果是集群情况下defaultZone设置为集群下其他的Eureka Server地址,多个地址使用","隔开defaultZone: http://localhost:9200/eurekaregister-with-eureka: true  # 表示是否向Eureka中心注册自己的信息,因为自己就是Eureka Server所以不进行注册,默认为truefetch-registry: true # 是否查询/拉取Eureka Server服务注册列表,默认为trueinstance:#hostname: localhost # 当前Eureka实例的主机名# 使用ip注册,否则会使用主机名注册(此处考虑到对老版本的兼容,新版本经过实验都是ip)prefer-ip-address: true# 自定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address早期版本是ipAddressinstance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
3. 修改 yx-service-page(消费者) 项⽬的启动类 ProductApplication ,添加 @EnableDiscoveryClient 注解
package com . yx . page ;
import org . springframework . boot . SpringApplication ;
import org . springframework . boot . autoconfigure . SpringBootApplication ;
import org . springframework . cloud . client . discovery . EnableDiscoveryClient ;
import org . springframework . context . annotation . Bean ;
import org . springframework . web . client . RestTemplate ;
@EnableDiscoveryClient
// @EnableEurekaClient
@SpringBootApplication
public class PageApplication {
public static void main ( String [] args ) {
SpringApplication . run ( PageApplication . class , args );
}
@Bean
public RestTemplate restTemplate () {
return new RestTemplate ();
}
}

 搭建Eureka Server⾼可⽤集群

Win11 操作系统
1. 打开 C 盘下的 C:\Windows\System32\drivers\etc\hosts ⽂件
2. hosts ⽂件中添加 Eureka Server 集群地址的配置
127.0.0.1 YXCloudEurekaServerC 
127.0.0.1 YXCloudEurekaServerD
搭建 Eureka Server 服务【 yx-cloud-eureka-9201 】,把之前搭建好的单个赋值出一份并修改信息

1.导入坐标

<dependencies>
<!-- Eureka Server 依赖 -->
<dependency>
<groupId> org.springframework.cloud </groupId>
<artifactId> spring-cloud-starter-netflix-eureka-server </artifactId>
</dependency>
</dependencies>

2.两份eureka的项目的配置的不同点,及相同点

 声明当前服务为Eureka注册中⼼

 6.修改连接集群的提供者的项目的配置文件

也改为这个 

 Ribbon负载均衡

Ribbon 开发代码 实现
多创建两个提供者,在所有提供者项目下 创建ServerConfigController 类定,定义 ⽅法返回当前微服务端⼝号。
package com . yx . product . controller ;
import org . springframework . beans . factory . annotation . Value ;
import org . springframework . web . bind . annotation . RequestMapping ;
import org . springframework . web . bind . annotation . RestController ;
@RestController
@RequestMapping ( "server" )
public class ServerConfigController {
@Value ( "${server.port}" )
private String serverPort ;
@RequestMapping ( "query_port" )
public String findServerPort () {
return serverPort ;
}
}

在所有提供者的主启动类上,加上注解

 注意提供者的端口号不一样但是名称要一样

 在消费者(page)的项目中的restTemplate()⽅法上添加启动Ribbon负载均衡的注解

4. yx-service-page ⻚⾯静态化微服务中定义调⽤ yx-server-product 服务获取端⼝信息的
queryProductServerPort() ⽅法,同时重构 queryProductById() ⽅法。

 以上负载均衡就配置完了,以下是各种配置信息

 消费者的配置一览

server:port: 9100
spring:application:name: yx-service-pagedatasource:url: jdbc:mysql://localhost:3306/yx_sc?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: 123
eureka:client: #Eureka Server本身也是Eureka的一个客户端,因为在集群下需要与其他Eureka Server进行数据的同步service-url:  # 客户端与Eureka Server交互的地址,如果是集群情况下defaultZone设置为集群下其他的Eureka Server地址,多个地址使用","隔开defaultZone: http://YXCloudEurekaServerC:9200/eureka,http://YXCloudEurekaServerD:9201/eurekainstance:#hostname: localhost # 当前Eureka实例的主机名# 使用ip注册,否则会使用主机名注册(此处考虑到对老版本的兼容,新版本经过实验都是ip)prefer-ip-address: true# 自定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address早期版本是ipAddressinstance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
## 针对的被调⽤⽅微服务名称,不加就是全局⽣效
#yx-service-product:
#  ribbon:
##    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 随机策略
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule # 轮询策略
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule # 重试策略

提供者的配置一览

server:port: 9001
spring:application:name: yx-service-productdatasource:url: jdbc:mysql://localhost:3306/yx_sc?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: 123
eureka:client: #Eureka Server本身也是Eureka的一个客户端,因为在集群下需要与其他Eureka Server进行数据的同步service-url:  # 客户端与Eureka Server交互的地址,如果是集群情况下defaultZone设置为集群下其他的Eureka Server地址,多个地址使用","隔开defaultZone: http://YXCloudEurekaServerC:9200/eureka,http://YXCloudEurekaServerD:9201/eurekaregistry-fetch-interval-seconds: 30 #表示客户端每隔多少秒拉去一次最新数据instance:#hostname: localhost # 当前Eureka实例的主机名# 使用ip注册,否则会使用主机名注册(此处考虑到对老版本的兼容,新版本经过实验都是ip)prefer-ip-address: true# 自定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address早期版本是ipAddressinstance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@metadata-map:username: adminpassword: 123456telphone: 1301112222#每隔30秒向注册中心汇报心跳lease-renewal-interval-in-seconds: 30#超过90秒还没汇报心跳Eureka Server会将该服务信息移除lease-expiration-duration-in-seconds: 90

Hystrix熔断器

1.1.在服务消费者⼯程(静态化微服务)中引⼊Hystrix依赖坐标

<!-- 熔断器 Hystrix -->
<dependency>
<groupId> org.springframework.cloud </groupId>
<artifactId> spring-cloud-starter-netflix-hystrix </artifactId>
</dependency>
2. 开启熔断,服务消费者⼯程(静态化微服务)的启动类上添加熔断器开启注解 @EnableCircuitBreaker

PageController 类中添加 findProductServerPort() 业务⽅法,并使⽤ @HystrixCommand进⾏熔断控制
/** 服务提供者模拟请求处理超时,服务消费者通过Hystrix控制 */
// 使⽤@HystrixCommand注解进⾏熔断控制
@HystrixCommand(// 线程池标识,默认情况下所有的请求共同维护⼀个线程池,实际开发中每个⽅法维护⼀个唯⼀的线程池threadPoolKey = "findProductServerPort",// 线程池细节属性配置threadPoolProperties = {@HystrixProperty(name="coreSize", value="2"), // 线程数@HystrixProperty(name="maxQueueSize", value="20") // 等待队列⻓度},
// commandProperties熔断的⼀些细节属性配置commandProperties = {// 每⼀个属性都是⼀个HystrixProperty// 设置请求的超时时间,⼀旦请求超过设定的时间就会按照超时进⾏处理@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",
value="2000")}
)
@RequestMapping("find_port")
public String findProductServerPort() {String url = "http://yx-service-product/server/query_port";return restTemplate.getForObject(url, String.class);
}

降级处理

添加 getProductServerPort() 业务⽅法,配置 @HystrixCommand 注解,定义降级处理⽅法。
    //如果服务提供者等待时间过长,服务消费方通过Hytrix来控制服务的调用(自动响应默认值给客户端)@HystrixCommand(//线程池标识配置默认情况下请求共同维护一个线程池threadPoolKey = "findProductServerPort",threadPoolProperties = {//核心线程为2@HystrixProperty(name="coreSize",value = "2"),//等待队列的最大长度@HystrixProperty(name="maxQueueSize",value = "20")},commandProperties = {//设置请求的超时时间,一旦超过时间,会触发Hystrix的处理机制@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="2000")},//表示回退方法,如果服务提供者出现问题,会调用属性所指向的方法fallbackMethod = "getProductServerPortFallbackMethod" // 回退⽅法)@RequestMapping("find_port")public String findProductServerPort() {String url = "http://yx-service-product/server/query_port";return restTemplate.getForObject(url, String.class);}/*** 定义回退⽅法,返回预设默认值。注意,该⽅法的参数列表和返回值类型必须与原始⽅法保持⼀致。* @return 预设默认值*/public String getProductServerPortFallbackMethod() {return "-1";}

Hystrix⾼级应⽤

1.注解配置

    //如果服务提供者等待时间过长,服务消费方通过Hytrix来控制服务的调用(自动响应默认值给客户端)@HystrixCommand(//线程池标识配置默认情况下请求共同维护一个线程池threadPoolKey = "findProductServerPort",threadPoolProperties = {//核心线程为2@HystrixProperty(name = "coreSize", value = "2"),//等待队列的最大长度@HystrixProperty(name = "maxQueueSize", value = "20")},commandProperties = {//设置请求的超时时间,一旦超过时间,会触发Hystrix的处理机制@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "2000"),// Hystrix⾼级配置,定制⼯作过程细节// 统计时间窗⼝定义@HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "8000"),// 统计时间窗⼝内的最⼩请求数@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "2"),// 统计时间窗⼝内的错误数量百分⽐阈值@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),// ⾃我修复时的活动窗⼝⻓度@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "3000")},//表示回退方法,如果服务提供者出现问题,会调用属性所指向的方法fallbackMethod = "getProductServerPortFallbackMethod" // 回退⽅法)@RequestMapping("find_port")public String findProductServerPort() {String url = "http://yx-service-product/server/query_port";return restTemplate.getForObject(url, String.class);}/*** 定义回退⽅法,返回预设默认值。注意,该⽅法的参数列表和返回值类型必须与原始⽅法保持⼀致。** @return 预设默认值*/public String getProductServerPortFallbackMethod() {return "-1";}

 2.yml配置就不必再配置以上图片的的内容

#配置HySTRIX的同短期参数
hystrix:command:default:   #就算不给也不报错有默认circuitBreaker:# 强制打开熔断器,如果该属性设置为true,强制断路器进入打开状态,将会拒绝所有的请求,默认false关闭的forceOpen: false# 触发熔断错误比例阈值,默认值50%errorThresholdPercentage: 50# 熔断后休眠时长,默认值5秒sleepWindowInMilliseconds: 3000# 熔断触发最小请求次数,默认值是20requestVolumeThreshold: 2execution:isolation:thread:# 熔断超时设置,默认为1秒timeoutInMilliseconds: 2000threadpool: #hytix线程池配置default:coreSize: 10 # 并发执⾏的最⼤线程数,默认10maxQueueSize: 1000 # BlockingQueue的最⼤队列数,默认值-1# 即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5queueSizeRejectionThreshold: 800
基于 Spring Boot 的健康检查观察跳闸状态(⾃动投递微服务暴露 健康检查 细节),在 yx-service-page 项⽬的 application.yml⽂件中配置。
# Spring Boot中暴露健康检查等断点接口
management:endpoints:web:exposure:include: "*"# 暴露健康接口的细节endpoint:health:show-details: always

配置完以上,注解这就简单了

Feign(终于来到这个了,其实以上的内容都是可以用feign来解决的)

1.在服务消费者⼯程(⻚⾯静态化微服务)中引⼊Feign依赖(或者⽗类⼯程)

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

服务消费者⼯程(或者⽗类⼯程)启动类上使⽤注解@EnableFeignClients添加Feign⽀持

 3.在消费者微服务(⻚⾯静态化微服务)的com.yx.page.feign包下创建ProductFeign接⼝。

package com.yx.erureka.feign;import com.qf.common.pojo.Products;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;// 注解表示Feign的远程调用
//-name:表示feign远程调用对应的服务提供者的名称
@FeignClient(name = "yx-service-product")
public interface ProductFeign {//载该接口中定义抽象方法,每一个抽象方法映射一个对应远程请求处理方法,注意要与远程处理方法的结构保持一致
@RequestMapping("/product/DD/{id}")
Products findById(@PathVariable Integer id);
@RequestMapping("/server/query_port")String findProductServerPort();
}

 自动装配

5.3 Feign对负载均衡的⽀持

yx-service-product:ribbon:# 请求连接超时时间ConnectTimeout: 2000# 请求处理超时时间ReadTimeout: 10000# 对所有操作都进⾏重试OkToRetryOnAllOperations: true# 根据如上配置,当访问到故障请求的时候,它会再尝试访问⼀次当前实例(次数由MaxAutoRetries配置),如果不⾏,# 就换⼀个实例进⾏访问;如果还不⾏,再换⼀次实例访问(更换次数由MaxAutoRetriesNextServer配置);如果依然不⾏,返回失败信息。MaxAutoRetries: 0 # 对当前选中实例重试次数,不包括第⼀次调⽤MaxAutoRetriesNextServer: 0 # 切换实例的重试次数NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载策略调整

 5.4 Feign对熔断器的⽀持

配置⽂件 application.yml 中开启 Feign 对熔断器的⽀持
# 开启Feign的熔断功能
feign:hystrix:enabled: true  # 开启Feign的熔断功能
​​​​​​​
com.yx.page.feign 包下⾃定义 ProductFeignFallback 处理类,需要实现 ProductFeign 接⼝。

 4.ProductFeign接⼝的@FeignClient注解上添加fallback属性来指定回退类

​​​​​​​​​​​​​​

5.5 Feign对请求压缩和响应压缩的⽀持 

application.yml⽂件中,通过下⾯的参数配置即可开启请求与响应的压缩功能

# 开启Feign的熔断功能
feign:hystrix:enabled: true  # 开启Feign的熔断功能compression:request:enabled: true # 默认不开启mime-types: text/html,application/xml,application/json # 设置压缩的数据类型,设置为默认值min-request-size: 2048 # 设置触发压缩的大小下限,2048为默认值response:enabled: true # 默认不开启

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

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

相关文章

【网站 全选和单选】js 实现-点击全选按钮时,所有的按钮都会被选中或取消选中。

要实现的效果如图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport…

Loki+promtail+Grafana监控docker容器日志

目标&#xff1a;监控docker容器的日志&#xff0c;适用于生产环境 效果&#xff1a; 需要的工具&#xff1a;Loki&#xff0c;promtail&#xff0c;Grafana 通过安装promtail容器收集日志&#xff0c;并把日志发送给loki存储处理&#xff0c;由Grafana展示日志。 参考官网的…

Windows bat隐藏运行窗口的几种方案

文章目录 一、背景二、测试数据三、隐藏bat运行窗口方案1. 使用VBScript脚本2. 使用mshta调用js或vbs脚本3. 将bat编译为exe程序4. 使用任务计划程序 一、背景 有些程序在执行批处理脚本时&#xff0c;可能会看到dos窗口&#xff0c;或者看到窗口一闪而过。如果批处理脚本执行…

(EMQX)STM32L+BC20+MQTT协议传输温湿度,ADC,电压,GPS数据到EMQX

1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡&#xff0c;天线 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板内&#xff08;注意不要弄错方向&#xff09; 同时接入天线 2.2 连接ST-Link仿真…

Python 算法基础篇:大O符号表示法和常见时间复杂度分析

Python 算法基础篇&#xff1a;大 O 符号表示法和常见时间复杂度分析 引言 1. 大 O 符号表示法 a ) 大 O 符号的定义 b ) 示例代码 2. 常见时间复杂度分析总结 引言 在分析和比较算法的性能时&#xff0c;时间复杂度是一项重要的指标。而大 O 符号表示法是用来描述算法时间复杂…

动态规划01背包之416分割等和子集(第10道)

题目&#xff1a; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例&#xff1a; 解法&#xff1a; 先复习一下01背包问题&#xff1a; dp[i][j]的含义&#xff1a;从下标为[0-i]的物品里…

Linux->初识计算机网络

目录 前言&#xff1a; 1 网络发展背景 2 协议 2.1 网络协议初识 2.2 协议分层 2.3 OSI、TCP/IP层状模型 2.4 协议和操作系统的关系 2.5 根据协议栈的通信 3 网络中的地址管理 前言&#xff1a; 本篇当中没有任何关于网络编程的讲解&#xff0c;全部是对网络的宏观理解…

【数学建模】 灰色预测模型

数学建模——预测模型简介 https://www.cnblogs.com/somedayLi/p/9542835.html 灰色预测模型 https://blog.csdn.net/qq_39798423/article/details/89283000?ops_request_misc&request_id&biz_id102&utm_term%E7%81%B0%E8%89%B2%E9%A2%84%E6%B5%8B%E6%A8%…

MySQL 进阶之王,MySql 性能实战源码 + 笔记 + 项目实战

随着互联网时代的兴起&#xff0c;MySQL 在数据库领域日益显现出举足轻重的地位&#xff0c;它不断扩大的用户群体就是很好的证明。在这样的背景下&#xff0c;需要越来越多的人在知识资源方面为之付出&#xff0c;将自己对 MySQL 数据库的学习过程、运维经验、个人理解等记录下…

scripy其他

持久化 # 爬回来&#xff0c;解析完了&#xff0c;想存储&#xff0c;有两种方案 ## 方案一&#xff1a;一般不用 parse必须有return值&#xff0c;必须是列表套字典形式--->使用命令&#xff0c;可以保存到json格式中&#xff0c;csv中scrapy crawl cnblogs -o cnbogs.j…

Web3 开发指南:使用 NFTScan NFT API 构建一个 NFT 链上追踪器

对于大多数 Web3 团队来说&#xff0c;构建一个完整的链上 NFT 数据追踪系统是一项具有挑战性的任务&#xff0c;构建一个 NFT 链上追踪器更是如此。涉及到处理区块链上的智能合约和交易数据&#xff0c;并将其与外部数据源进行整合和分析工作量是十分巨大的&#xff1a; 区块链…

RocketMQ学习笔记(实操篇)

目录 基本操作 启动 测试 双主双从集群搭建 总体架构 工作流程 服务器环境 Host添加信息 防火墙配置 环境变量配置 创建消息存储路径 broker配置文件 修改启动脚本文件 服务启动 查看进程状态 查看日志 mqadmin管理工具 使用方式 命令介绍 集群监控平台搭…

基于深度学习的高精度刀具检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度刀具检测识别系统可用于日常生活中或野外来检测与定位刀具目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的刀具目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

谈谈——互联网生活中的隐私保护

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

图形编辑器开发:参考线吸附功能,让图形自动对齐

最近我给图形编辑器增加了参照线吸附功能&#xff0c;讲讲我的实现思路。 我正在开发的图形设计工具&#xff1a; https://github.com/F-star/suika 线上体验&#xff1a; https://blog.fstars.wang/app/suika/ 效果是被移动的图形会参考周围图形&#xff0c;自动与它们进行吸附…

MySQl数据库第八课-------SQL命令查询-------主要命脉

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————— 目录 查询数据 条件 逻辑运算符 模糊查询 范围查询 in 判断空 UNION 排序 聚合 分组&#xff1a;group by —————————…

c++计算贝塞尔曲线(折线平滑为曲线)坐标方法

效果可查看上一篇博文&#xff1a;js手动画平滑曲线&#xff0c;贝塞尔曲线拟合【代码】js手动画平滑曲线&#xff0c;贝塞尔曲线拟合。https://blog.csdn.net/qiufeng_xinqing/article/details/131711963?spm1001.2014.3001.5502 代码如下&#xff1a; #include <cmath&…

FPGA实验三:状态机的设计

目录 一、实验目的 二、实验要求 三、实验代码 1.design source文件部分代码 2.测试文件代码 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 &#xff08;1&#xff09;设计好序列检测器 &#xff08;2&#xff09;仿真波形&#xff08;检测11010&#xff09; 3…

【网络系统集成】路由器实验

1.实验名称:路由器RIP协议配置 2.实验目的 在PacketTracer中进行模拟实验,配置RIP协议,验证RIP协议更新时间及路由状态变化,加深对路由器RIP协议相关知识的理解与掌握。 3.实验内容 (1)拓扑结构图 (2)ip地址分配与端口分配