【微服务】Eureka(服务注册,服务发现)

文章目录

    • 1.基本介绍
        • 1.学前说明
        • 2.当前架构分析
          • 1.示意图
          • 2.问题分析
        • 3.引出Eureka
          • 1.项目架构分析
          • 2.上图解读
    • 2.创建单机版的Eureka
        • 1.创建 e-commerce-eureka-server-9001 子模块
        • 2.检查父子pom.xml
          • 1.子 pom.xml
          • 2.父 pom.xml
        • 3.pom.xml 引入依赖
        • 4.application.yml 配置eureka服务
        • 5.com/sun/springcloud/EurekaApplication.java 编写启动类运行测试
        • 6.会员中心模块作为Eureka Client示意图
        • 7.member-service-provider-10001 模块作为Eureka Client
          • 1.pom.xml引入Eureka 客户端依赖
          • 2.application.yml 配置Eureka Client
          • 3.修改启动类添加注解
        • 8.测试
          • 1.先启动Eureka 服务端,再启动Eureka 客户端
          • 2.访问(http://localhost:9001/) 进入Eureka 服务端
        • 9.服务消费模块作为Eureka Client示意图
        • 10.member-service-consumer-81 模块作为Eureka Client
          • 1.pom.xml 引入Eureka 客户端依赖
          • 2.application.yml 配置Eureka Client
          • 3.修改启动类添加注解
        • 11.测试
          • 1.先启动Eureka 服务端,再启动Eureka 客户端
          • 2.访问(http://localhost:9001/) 进入Eureka 服务端
        • 12.梳理Service Consumer Service Provider Eureka Server 维护机制
        • 13.Eureka自我保护模式
          • 1.基本介绍
          • 2.小结
          • 3.禁用自我保护模式
            • 1.服务端配置
            • 2.客户端配置
            • 3.启动后访问http://localhost:9001/
            • 4.关闭掉客户端
    • 3.搭建Eureka多服务集群
        • 1.示意图
        • 2.创建e-commerce-eureka-server-9002子模块作为第二个Eureka服务
        • 3.pom.xml 引入依赖(跟9001子模块的一样)
        • 4.application.yml 配置
        • 5.修改9001模块的 application.yml 配置完成两个服务相互注册
        • 6.编写启动类
        • 7.配置Hosts运行Eureka
          • 1.解释
          • 2.hosts文件所在位置
          • 3.修改Hosts文件
          • 4.启动这两个服务,访问测试
        • 8.Eureka多个服务端互相注册配置文件理解
          • 1.服务端一(eureka9001.com:9001)
          • 2.服务端二(eureka9002.com:9002)
    • 4.将客户端注册到Eureka服务集群
        • 1.示意图
        • 2.修改81客户端的application.yml
        • 3.修改10001客户端的application.yml
        • 5.启动四个服务
        • 6.测试访问
        • 7.Eureka多个客户端注册多个服务端配置文件理解
          • 1.客户端一(端口81)
          • 2.客户端二(端口10001)
    • 5.搭建会员中心服务提供方集群
        • 1.示意图
        • 2.基本说明
        • 3.创建 member-service-provider-10002 子模块与10001功能完全一致
        • 4.打开10001模块的文件夹,复制main目录下的文件夹
        • 5.打开10002模块的文件夹,将刚才复制的内容粘贴到main目录下
        • 6.打开idea查看10002模块
        • 7.将10001模块的pom.xml文件依赖粘贴到10002模块(刷新maven)
        • 8.修改10002模块application.yml 的端口为10002
        • 9.修改10002和10001模块的主启动类名称
        • 10.启动所有服务进行测试
        • 11.统一10001服务和10002服务的注册名并启动测试
    • 6.服务消费方(81模块)使用Eureka服务集群
        • 1.示意图
        • 2.修改com/sun/springcloud/controller/MemberConsumerController.java 的前缀为服务提供者在Eureka服务端的key
        • 3.修改com/sun/springcloud/config/CustomizationBean.java 增加调用时负载均衡注解
        • 4.修改两个服务提供方的信息,以便区分
          • member-service-provider-10001
          • member-service-provider-10002
        • 5.启动测试
          • 1.启动全部服务
          • 2.查看注册情况
          • 3.postman测试两个服务提供方是否正常
            • member-service-provider-10001
            • member-service-provider-10002
          • 4.发送请求到服务提供方 member-service-consumer-81
            • 1.第一次请求
            • 2.第二次请求
    • 7.DiscoveryClient获取服务注册信息
        • 1.示意图
        • 2.需求分析
        • 3.代码实现
          • 1.com/sun/springcloud/controller/MemberConsumerController.java 服务消费者调用DiscoveryClient
            • 1.以接口的形式注入DiscoveryClient
            • 2.编写一个接口完成服务发现
            • 3.在启动类使用@EnableDiscoveryClient启动服务发现
        • 4.启动所有服务进行测试
        • 5.注意事项
    • 8.小结
        • 1.项目完整文件目录
        • 2.项目架构图

1.基本介绍

1.学前说明

image-20240324170147708

2.当前架构分析
1.示意图

image-20240324171627695

2.问题分析

image-20240324171708729

3.引出Eureka
1.项目架构分析

image-20240324172210983

2.上图解读

image-20240324172631328

2.创建单机版的Eureka

1.创建 e-commerce-eureka-server-9001 子模块

image-20240324190850244

2.检查父子pom.xml
1.子 pom.xml

image-20240324191046396

2.父 pom.xml

image-20240324191140546

3.pom.xml 引入依赖
    <dependencies>

        <!-- 引入 eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <!-- 使用版本仲裁 -->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </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>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <!-- 公共模块的jar包 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
4.application.yml 配置eureka服务
server:
  port: 9001
eureka: # 配置eureka-server
  instance:
    hostname: localhost # 服务实例名
  client: # 因为以后可能有其他的eureka服务端,那是这个eureka服务就会既是客户端又是服务端,所以在这里配置一下作为客户端的配置
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 自己就是注册中心,所以不需要去发现服务
    service-url:
      # 这里使用了${}来动态获取主机和端口
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)

5.com/sun/springcloud/EurekaApplication.java 编写启动类运行测试
package com.sun.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/24 19:38
 * @Version 1.0
 */
@EnableEurekaServer // 作为eureka服务端启动
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

image-20240324195158793

6.会员中心模块作为Eureka Client示意图

image-20240324195456887

7.member-service-provider-10001 模块作为Eureka Client
1.pom.xml引入Eureka 客户端依赖
        <!-- 引入eureka的客户端场景启动器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <!-- 使用版本仲裁 -->
        </dependency>
2.application.yml 配置Eureka Client
server:
  port: 10001 # 配置服务端口
spring:
  application:
    name: member-service-provider-10001 # 配置服务的名称,名字任意这里与项目名保持一致
eureka: # eureka客户端配置
  client:
    register-with-eureka: true # 将自己注册到eureka服务
    fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡
    service-url:
      defaultZone: http://localhost:9001/eureka #表示自己要注册到哪个服务
3.修改启动类添加注解

image-20240324202947223

8.测试
1.先启动Eureka 服务端,再启动Eureka 客户端
2.访问(http://localhost:9001/) 进入Eureka 服务端

image-20240324202316203

image-20240324202339027

9.服务消费模块作为Eureka Client示意图

image-20240324202615904

10.member-service-consumer-81 模块作为Eureka Client
1.pom.xml 引入Eureka 客户端依赖
        <!-- 引入eureka的客户端场景启动器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <!-- 使用版本仲裁 -->
        </dependency>
2.application.yml 配置Eureka Client
server:
  port: 81 # 监听81端口
spring:
  application:
    name: member-service-consumer-81
eureka: # eureka客户端配置
  client:
    register-with-eureka: true # 将自己注册到eureka服务
    fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡
    service-url:
      defaultZone: http://localhost:9001/eureka #表示自己要注册到哪个服务
3.修改启动类添加注解

image-20240324205028005

11.测试
1.先启动Eureka 服务端,再启动Eureka 客户端
2.访问(http://localhost:9001/) 进入Eureka 服务端

image-20240324205133634

12.梳理Service Consumer Service Provider Eureka Server 维护机制
  • 简单来说Eureka就两个功能,发现服务,注册服务!
  • 基本流程就是会员中心启动之后将自己的信息注册到Eureka Server(注册服务),服务消费者启动之后通过Eureka Server来发现服务(发现服务),得到会员中心的调用地址,然后通过rpc远程调用

image-20240324210200932

13.Eureka自我保护模式
1.基本介绍

image-20240325085940410

2.小结
  • 服务在注册之后会不断地向服务端发送心跳,正常情况下如果90s内没有心跳,则服务端会认为这个客户端down掉了,就会清除记录
  • 但是一旦自我保护机制开启,即使90s内没有心跳,也不会请求记录
3.禁用自我保护模式
1.服务端配置
server:
  port: 9001
eureka: # 配置eureka-server
  instance:
    hostname: localhost # 服务实例名
  client: # 因为以后可能有其他的eureka服务端,那是这个eureka服务就会既是客户端又是服务端,所以在这里配置一下作为客户端的配置
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 自己就是注册中心,所以不需要去检索服务
    service-url:
      # 这里使用了${}来动态获取主机和端口
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)
  server:
    enable-self-preservation: false # 关闭自我保护机制
    eviction-interval-timer-in-ms: 2000 # 两秒内收不到心跳包,就会超时
2.客户端配置
server:
  port: 10001 # 配置服务端口
spring:
  application:
    name: member-service-provider-10001 # 配置服务的名称,名字任意这里与项目名保持一致
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    # 别忘记创建数据库之后修改数据库名称
    url: 
    username: 
    password: 
mybatis:
  mapper-locations: classpath:mapper/*.xml # 扫描所有Mapper.xml
  type-aliases-package: com.sun.springcloud.entity # 扫描所有实体类,可以直接使用类名来标识
eureka: # eureka客户端配置
  client:
    register-with-eureka: true # 将自己注册到eureka服务
    fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡
    service-url:
      defaultZone: http://localhost:9001/eureka #表示自己要注册到哪个服务
  instance:
    lease-renewal-interval-in-seconds: 1 # 客户端向服务端发送的心跳间隔,默认30s
    lease-expiration-duration-in-seconds: 2 # 服务端收到最后一次心跳后等待的时间上限,默认90s
3.启动后访问http://localhost:9001/

image-20240325092003298

4.关闭掉客户端

image-20240325092029292

3.搭建Eureka多服务集群

1.示意图

image-20240325092723818

2.创建e-commerce-eureka-server-9002子模块作为第二个Eureka服务

image-20240325093013429

3.pom.xml 引入依赖(跟9001子模块的一样)
    <dependencies>

        <!-- 引入 eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <!-- 使用版本仲裁 -->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </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>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <!-- 公共模块的jar包 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
4.application.yml 配置
server:
  port: 9002
eureka: # 配置eureka-server
  instance:
    hostname: eureka9002.com # 服务实例名
  client: # 因为以后可能有其他的eureka服务端,那是这个eureka服务就会既是客户端又是服务端,所以在这里配置一下作为客户端的配置
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 自己就是注册中心,所以不需要去检索服务
    service-url:
      # 注册到9001server
      defaultZone: http://eureka9001.com:9001/eureka/ # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)

5.修改9001模块的 application.yml 配置完成两个服务相互注册
server:
  port: 9001
eureka: # 配置eureka-server
  instance:
    hostname: eureka9001.com # 服务实例名
  client: # 因为以后可能有其他的eureka服务端,那是这个eureka服务就会既是客户端又是服务端,所以在这里配置一下作为客户端的配置
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 自己就是注册中心,所以不需要去检索服务
    service-url:
      # 注册到9002server
      defaultZone: http://eureka9002.com:9002/eureka/ # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)

6.编写启动类
package com.sun.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/25 9:36
 * @Version 1.0
 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication9002 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication9002.class, args);
    }
}

7.配置Hosts运行Eureka
1.解释
  • 由于上面配置的两个Eureka服务使用的是域名eureka9001.com和eureka9002.com
  • 所以需要配置hosts文件
2.hosts文件所在位置

image-20240325095640615

3.修改Hosts文件
  • 这样eureka9002.com和eureka9001.com都表示127.0.0.1了
  • 如果这里不能直接修改就把文件复制一份在别的地方修改一下然后覆盖这个文件即可
  • 注意:你如果现在开的代理服务器,hosts文件是不生效的!

image-20240325095927191

4.启动这两个服务,访问测试

image-20240325102139626

image-20240325102128008

8.Eureka多个服务端互相注册配置文件理解
1.服务端一(eureka9001.com:9001)
server:
  port: 9001
eureka: # 配置eureka-server
  instance:
    hostname: eureka9001.com # 服务实例名(只有服务端才配置,就是ip)
  client: #	服务端和客户端都需要配置
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 自己就是注册中心,所以不需要去检索服务
    service-url:
      # 注册地址(如果只有一个服务端,就填写自己的服务地址加上/eureka/)这里注册到eureka9002.com:9002
      defaultZone: http://eureka9002.com:9002/eureka/ # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)

2.服务端二(eureka9002.com:9002)
server:
  port: 9002
eureka: # 配置eureka-server
  instance:
    hostname: eureka9002.com # 服务实例名(只有服务端才配置,就是ip)
  client: #	服务端和客户端都需要配置
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 自己就是注册中心,所以不需要去检索服务
    service-url:
      # 注册地址(如果只有一个服务端,就填写自己的服务地址加上/eureka/)这里注册到eureka9001.com:9001
      defaultZone: http://eureka9001.com:9001/eureka/ # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)

4.将客户端注册到Eureka服务集群

1.示意图

image-20240325103431797

2.修改81客户端的application.yml
server:
  port: 81 # 监听81端口
spring:
  application:
    name: member-service-consumer-81
eureka: # eureka客户端配置
  client:
    register-with-eureka: true # 将自己注册到eureka服务
    fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡
    service-url:
      # 需要注册到两个服务,则只需要用逗号间隔
      defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/
3.修改10001客户端的application.yml
server:
  port: 10001 # 监听10001端口
spring:
  application:
    name: member-service-provider-10001 # 配置服务的名称,名字任意这里与项目名保持一致
eureka: # eureka客户端配置
  client:
    register-with-eureka: true # 将自己注册到eureka服务
    fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡
    service-url:
      # 需要注册到两个服务,则只需要用逗号间隔
      defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/  #表示自己要注册到哪个服务
5.启动四个服务

image-20240325104314071

6.测试访问

image-20240325104410526

image-20240325104420924

7.Eureka多个客户端注册多个服务端配置文件理解
1.客户端一(端口81)
server:
  port: 81 # 监听81端口
spring:
  application:
    name: member-service-consumer-81 # 客户端服务名称
eureka: # eureka客户端配置
  client:
    register-with-eureka: true # 将自己注册到eureka服务
    fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡
    service-url:
      # 需要注册到两个服务,则只需要用逗号间隔
      defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/
2.客户端二(端口10001)
server:
  port: 10001 # 监听10001端口
spring:
  application:
    name: member-service-provider-10001 # 客户端服务名称
eureka: # eureka客户端配置
  client:
    register-with-eureka: true # 将自己注册到eureka服务
    fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡
    service-url:
      # 需要注册到两个服务,则只需要用逗号间隔
      defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/  #表示自己要注册到哪个服务

5.搭建会员中心服务提供方集群

1.示意图

image-20240325105527585

2.基本说明

image-20240325105709044

3.创建 member-service-provider-10002 子模块与10001功能完全一致

image-20240325105924475

4.打开10001模块的文件夹,复制main目录下的文件夹

image-20240325110319568

5.打开10002模块的文件夹,将刚才复制的内容粘贴到main目录下

image-20240325110432090

6.打开idea查看10002模块

image-20240325110504774

7.将10001模块的pom.xml文件依赖粘贴到10002模块(刷新maven)
8.修改10002模块application.yml 的端口为10002

image-20240325110914698

9.修改10002和10001模块的主启动类名称

image-20240325111123386

image-20240325111217623

10.启动所有服务进行测试

image-20240325111814235

image-20240325111837051

11.统一10001服务和10002服务的注册名并启动测试

image-20240325112202015

image-20240325112449215

6.服务消费方(81模块)使用Eureka服务集群

1.示意图

image-20240325113458875

2.修改com/sun/springcloud/controller/MemberConsumerController.java 的前缀为服务提供者在Eureka服务端的key

image-20240325114305189

3.修改com/sun/springcloud/config/CustomizationBean.java 增加调用时负载均衡注解

image-20240325114427297

4.修改两个服务提供方的信息,以便区分
member-service-provider-10001

image-20240325124911816

member-service-provider-10002

image-20240325124844086

5.启动测试
1.启动全部服务

image-20240325125405549

2.查看注册情况

image-20240325130512344

image-20240325130429387

3.postman测试两个服务提供方是否正常
member-service-provider-10001

image-20240325125737294

member-service-provider-10002

image-20240325125810014

4.发送请求到服务提供方 member-service-consumer-81
1.第一次请求

image-20240325130122813

2.第二次请求

image-20240325130138782

7.DiscoveryClient获取服务注册信息

1.示意图

image-20240325130929440

2.需求分析

image-20240325131114680

3.代码实现
1.com/sun/springcloud/controller/MemberConsumerController.java 服务消费者调用DiscoveryClient
1.以接口的形式注入DiscoveryClient

image-20240325133621497

2.编写一个接口完成服务发现
    /**
     * 服务消费方通过eureka服务集群来获取到服务提供方的服务
     *
     * @return
     */
    @GetMapping("/member/consumer/discovery")
    public Object discovery() {
        // 获取所有服务id
        List<String> services = discoveryClient.getServices();
        for (String service : services) {
            log.info("服务名小写={}", service);
            // 获取当前服务id对应的实例(可能有多个)
            List<ServiceInstance> instances = discoveryClient.getInstances(service);
            for (ServiceInstance instance : instances) {
                log.info("id={}, host={}, port={}, uri={}", service, instance.getHost(), instance.getPort(), instance.getUri());
            }
        }
        return services;
    }
3.在启动类使用@EnableDiscoveryClient启动服务发现

image-20240325133726850

4.启动所有服务进行测试

image-20240325133941011

image-20240325133951854

5.注意事项

image-20240325134044146

8.小结

1.项目完整文件目录

image-20240325135428407

2.项目架构图

image-20240325135933635

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Web APIs】事件高级

目录 1.事件对象 1.1获取事件对象 1.2事件对象常用属性 2.事件流 1.1事件流的两个阶段&#xff1a;冒泡和捕获 1.2阻止事件流动 1.3阻止默认行为 1.4两种注册事件的区别 3.事件委托 1.事件对象 1.1获取事件对象 事件对象&#xff1a;也是一个对象&#xff0c;这个对象里…

rapidssl证书通配符证书800元

RapidSSL旗下的DV基础型通配符SSL证书可以同时保护多个域名站点&#xff0c;保护主域名以及主域名下的所有子域名。这款通配符SSL证书可以为网站提供数据加密服务&#xff0c;营造安全的上网环境&#xff0c;确保用户在网站上的数据安全传输。今天就随SSL盾小编了解RapidSSL旗下…

2024年HCIE考试题二

27、以下关于在网络中选择认证点位置的描述中&#xff0c;错误的是哪一项&#xff1f; A.在网络的接入层部署认证&#xff0c;有利于实现权限的细颗粒度管理和网络的高安全性 B.用户认证点从接入层上移到汇聚层之后&#xff0c;可能会导致用户的MAC认证失败 C.当用户认证点从…

DC电源模块的设计与调试技巧

BOSHIDA DC电源模块的设计与调试技巧 DC电源模块的设计与调试是电子工程师在实际项目中常常需要面对的任务。一个稳定可靠的DC电源模块对于电路的正常运行起到至关重要的作用。以下是一些设计与调试的技巧&#xff0c;帮助工程师们更好地完成任务。 第一&#xff0c;正确选择…

vue3.0 + ts + eslint报错:error Parsing error: ‘>‘ expected

eslint报错 这里加上对应的 eslint配置即可&#xff1a; parser: vue-eslint-parser, parserOptions: {parser: "typescript-eslint/parser",ecmaVersion: 2020,sourceType: module, }具体如下&#xff1a; module.exports {parser: vue-eslint-parser,parserOpti…

代码随想录阅读笔记-栈与队列【删除字符串中的所有相邻重复项】

题目 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例&#xff1a; 输入&am…

如何成功将自己开发的APP上架到应用商店

如何成功将自己开发的APP上架到应用商店 随着移动应用市场的蓬勃发展&#xff0c;开发一款优秀的APP已成为许多企业和个人的首要选择。然而&#xff0c;成功上架并有效推广APP至关重要。本文将逐步介绍完整的上架流程&#xff0c;包括准备所需材料、注册开发者账户、进行APP备…

OpenLayers基础教程——使用WebGLPoints加载海量点数据

1、前言 最近遇到一个问题&#xff1a;如何在OpenLayers中高效加载海量的场强点&#xff1f;由于项目中的一些要求&#xff0c;不能使用聚合的方法加载。一番搜索之后发现&#xff1a;OpenLayers中有一个WebGLPoints类&#xff0c;使用该类可以轻松应对几十万的数据量&#xf…

多目标追踪实现_3.9

目标 利用sort算法完成多目标追踪 在这里主要实现了一个多目标跟踪器&#xff0c;管理多个卡尔曼滤波器对象&#xff0c;主要包括以下内容&#xff1a; 初始化&#xff1a;最大检测数&#xff0c;目标未被检测的最大帧数 目标跟踪结果的更新&#xff0c;即跟踪成功和失败的目…

Android第一行代码——快速入门 Kotlin 编程(4.7 编写界面的最佳实践)

目录 4.7 编写界面的最佳实践 4.7.1 制作 9—Patch 图片 4.7.2 编写精美的聊天界面 4.7 编写界面的最佳实践 既然已经学习了那么多 UI 开发的知识,是时候实战一下了。这次我们要综合运用前面所学的大量内容来编写出一个较为复杂且相当美观的聊天…

【前端寻宝之路】JavaScript初学之旅

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-azUa9yH16cRXQUxE {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

代码随想录算法训练营第十五天| 二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

系列文章目录 目录 系列文章目录二叉树层序遍历&#xff08;10题&#xff09;102. 二叉树的层序遍历①DFS--递归方式②BFS--迭代方式--借助队列 107.二叉树的层次遍历 II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历遍历每个节点的子节点 515.在每个树行中找最大…

Ftrans安全数据摆渡系统 构建便捷的内外网数据交换通道

安全数据摆渡系统是一种设计用于解决内外网环境下&#xff0c;数据传输、管理、共享问题的安全系统&#xff0c;通过加密、访问控制等策略&#xff0c;提供安全可靠的数据传输和共享服务&#xff0c;尤其适用于对网络安全建设要求高的行业&#xff0c;比如研发型企业、党政机构…

构建vue3项目以及bem架构

构建vue3vite项目 &#xff08;1&#xff09;使用vite初始化一个项目 npm init vitelatest &#xff08;2&#xff09;构建cli项目 vue create <project> bem架构 src下新建文件bem.scss $namespace: "xc" !default; $block-sel: "-" !defaul…

【LVGL-开关部件】

LVGL-开关部件 ■ LVGL-开关部件■ 开关部件&#xff1a;指示器打开的颜色■ 开关部件&#xff1a;不可修改■ 开关部件&#xff1a;获取开关状态■ 开关部件&#xff1a;示例一&#xff1a;制冷,制暖,开关 ■ LVGL-开关部件 ■ 开关部件&#xff1a;指示器打开的颜色 ■ 开关部…

Leetcode算法题笔记(2)

目录 图论51. 岛屿数量解法一 52. 腐烂的橘子解法一 53. 课程表解法一 54. 实现 Trie (前缀树)解法一 回溯55. 全排列解法一 56. 子集解法一解法二 57. 电话号码的字母组合解法一 58. 组合总和解法一解法二 59. 括号生成解法一解法二 60. 单词搜索解法一 图论 51. 岛屿数量 给…

PostgreSQL FDW(外部表) 简介

1、FDW: 外部表 背景 提供外部数据源的透明访问机制。PostgreSQL fdw(Foreign Data Wrapper)是一种外部访问接口,可以在PG数据库中创建外部表,用户访问的时候与访问本地表的方法一样,支持增删改查。 而数据则是存储在外部,外部可以是一个远程的pg数据库或者其他数据库(…

java数据结构与算法刷题-----LeetCode435. 无重叠区间

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路&#xff1a;贪心思想。时间复杂度O( n ∗ l o g 2 n n*…

闻了刚脱下的袜子导致肺部感染真菌?后果很严重

之前有网友分享自己只因闻了刚脱下的袜子&#xff0c;就导致了肺部感染真菌的经历&#xff0c;引发众多网友的关注与热议。 那么&#xff0c;臭袜子又怎么会和肺部感染有关系呢&#xff1f;臭袜子为什么不能闻呢&#xff1f;袜子上面到底有什么有危险的成分呢&#xff1f; 图源…

基于Matlab的血管图像增强算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…
最新文章