当前位置: 首页 > news >正文

SpringCloudTencent(上)

SpringCloudTencent

  • 1.PolarisMesh介绍
  • 2.北极星具备的功能
  • 3.北极星包含的组件
  • 4.功能特性
    • 1.服务管理
      • 1.服务注册
      • 2.服务发现
      • 3.健康检查
    • 2.配置管理
  • 5.代码实战
    • 1.环境准备
    • 2.服务注册与发现
    • 3.远程调用

1.PolarisMesh介绍

1.北极星是腾讯开源的服务治理平台,致力于解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题,针对不同的技术栈和环境提供服务治理的标准方案和最佳实践

2.官方文档:https://polarismesh.cn/docs

3.项目地址:https://github.com/PolarisMesh

4.在线体验:http://119.91.66.223/#/login

  • 用户名:polaris
  • 密码:polaris

2.北极星具备的功能

1.结构图
在这里插入图片描述
2.北极星具备服务管理、流量管理、故障容错、配置管理和可观测性五大功能:

  • 服务管理:包含服务发现、服务注册、健康检查和元数据管理。
    • 服务发现:支持 HTTP、SDK 和 DNS 服务发现方式。
    • 服务注册:支持 HTTP、SDK、控制台操作和 K8s 服务注册方式。
    • 健康检查:支持服务实例上报心跳,通过心跳判断实例是否健康,及时剔除异常实例。
    • 元数据管理:支持在服务和实例上配置协议、版本和位置等标签,实现动态路由等功能。
  • 流量管理:包含动态路由、负载均衡和访问限流。
    • 动态路由:支持自定义路由策略,将服务的部分请求路由到部分实例,用于灰度发布等应用场景。
    • 负载均衡:支持权重轮训、权重随机和权重一致性 Hash 等负载均衡算法。
    • 访问限流:支持本地和分布式两种模式,被限流的请求支持排队和自定义响应。
  • 故障容错:包含服务熔断和节点熔断。
    • 服务熔断:对服务或者接口进行熔断,如果服务或者接口发生熔断,返回自定义响应。
    • 节点熔断:对服务实例进行熔断,不会将请求路由到熔断的服务实例,降低请求失败率。
    • 主动探测:服务和节点熔断除了被动探测,还支持主动探测,进一步降低请求失败率。
      配置管理:包含配置变更、配置校验、版本管理和灰度发布等功能。
  • 可观测性:提供业务流量、系统事件和操作记录等监控视图。

3.北极星包含的组件

1.结构图

在这里插入图片描述
2.北极星的系统组件分为控制台、控制面和数据面三个部分

  • 控制台:提供简单易用的管理页面,支持用户和权限管理。
  • 控制面:包含核心组件 Polaris 和可选的功能组件,核心组件可以满足绝大部分业务需求,可选的功能组件按需部署。
  • 数据面:提供多语言 SDK、开发框架、Java Agent 和网格代理四种形态的实现,满足不同的业务场景和开发模式,支持异构服务的互联互通和统一治理。

3.控制面组件

  • Polaris:支持各种形态的数据面接入,支持服务和配置数据的管理和下发,支持流量管理和熔断降级策略的管理和下发,可以覆盖服务注册中心、服务网格控制面和配置中心的功能。

  • Polaris Controller:可选的功能组件,支持 K8s 服务同步和网格代理注入。K8s 服务同步将 K8s 服务按需同步到北极星,用户不需要在应用程序里显式地注册服务。网格代理注入按需在应用程序 Pod 里注入北极星 Sidecar,以流量代理的方式实现服务发现和治理功能。

4.数据面组件

  • SDK:北极星提供轻量级的多语言 SDK,使用方法和绝大部分客户端软件类似,用户在应用程序里引入北极星 SDK。这种数据面形态以无流量代理的方式实现服务发现和治理功能,没有额外的性能和资源损耗,不会增加现网运维和问题定位的成本。

  • 开发框架:北极星 SDK 可以被集成到开发框架内部,如果用户使用开发框架,不需要显式地引入北极星 SDK。对于 Spring Cloud、Dubbo 和 gRPC 等开发框架,北极星提供可以无缝集成的依赖包。另外,go-micro、go-kratos、go-zero、GoFrame 和 CloudWeGo 等开发框架社区也提供北极星插件。

  • Java Agent:对于 Spring Cloud 和 Dubbo 等 Java 开发框架,北极星支持 Java 生态常用的 Agent 接入模式。用户只需要在应用程序的启动命令中引入 Polaris Java Agent,即可将北极星的服务发现和治理功能引入应用程序,不需要改动任何代码和配置文件。

  • 网格代理:北极星网格代理在应用程序 Pod 里注入 Polaris Sidecar 和 Proxy,前者通过劫持 DNS 解析将请求转到后者,后者通过流量代理实现服务发现和治理功能。这种数据面形态适合性能和资源损耗不敏感的业务,要求业务具备网格代理的运维能力

4.功能特性

1.服务管理

1.服务注册

服务注册指的是被调方按照服务模型将自身的服务数据注册到北极星,以供主调方进行服务发现。(这里和我们常用的nacos差不多)

1.服务数据主要包括以下部分:

  • 服务名:服务的唯一标识,区分大小写。
  • 服务元数据:服务的标签信息,KV格式,可对服务进行分类,可用于过滤。
  • 服务实例:提供服务的节点列表,以IP:PORT的方式提供。
  • 服务实例元数据:服务实例的标签信息,KV格式,通常用于描述节点的集群、版本等,用于后续 流量治理等操作。

2.服务注册的方式
在这里插入图片描述
3.通过SDK注册:北极星提供了多语言SDK,服务可以通过集成SDK,调用registerInstance接口完成服务注册

4.通过服务框架注册

  • 服务框架会提供通用的服务注册接口,供应用在拉起的时候,自动往注册中心注册
  • 北极星对主流的服务框架(SpringCloud,Dubbo,gRPC)做了适配,用户无需修改业务逻辑代码,只需引入北极星的框架扩展库,即可实现自动注册

5.通过k8s同步的方式注册:用户通过k8s部署服务,并注册为k8s的service,北极星通过controller的机制,从k8s中将service和endpoint信息同步到北极星,完成服务注册

在这里插入图片描述
6.通过OpenAPI注册:北极星控制面提供基于Rest标准的OpenAPI,用户可通过OpenAPI完成服务注册的操作

2.服务发现

服务发现指的主调方是根据服务名标识,拉取服务实例列表,以供后续进行服务调用的操作

1.服务发现的方式
在这里插入图片描述
2.通过SDK进行服务发现

  • 北极星提供了多语言SDK,SDK通过ConsumerAPI提供3个接口进行服务发现:
    • getAllInstances:获取服务下全量的服务实例列表,不做任何过滤。
    • getHealthyInstances:获取服务下健康的服务实例列表,只包含健康实例,不包含被熔断、不健康、隔离、权重为0的实例。
    • getOneInstances:针对健康的服务实例列表,进行动态路由和负载均衡,返回单个可用的服务实例。

3.通过服务框架进行服务发现

  • 服务框架会提供通用的服务发现接口,应用在RPC之前,会自动进行服务发现,获取到可用的实例进行RPC调用
  • 北极星对主流的服务框架(SpringCloud,Dubbo,gRPC)做了适配,用户无需修改业务逻辑代码,只需引入北极星的框架扩展库,即可实现自动发现

4.使用DNS进行服务发现:北极星通过polaris-sidecar提供DNS功能,用户程序可以通过DNS域名访问的方式,实现无侵入的服务发现

5.使用OpenAPI服务发现:北极星控制面提供基于Rest标准的OpenAPI,用户可通过OpenAPI完成服务发现的操作

3.健康检查

健康检查提供了一种机制,使得控制面可以在一定时间段内,感知服务实例出现异常,从而将异常节点剔除,并通知给所有的消费者

心跳上报:服务实例持续上报心跳给控制面,并与控制面约定TTL的时间段,控制面检查服务实例的心跳上报时间点,当发现当前时间相比实例最后一次上报时间已经超过3*TTL,就将实例标记为不健康,并通知给该服务的消费者

在这里插入图片描述

2.配置管理

1.结构图
在这里插入图片描述

2.客户端视角

  1. 应用启动时,同步从服务端拉取一次配置,获取最新的配置内容
  2. 把第一步拉取到的所有的配置文件生成 ListVersion> 的数据 ,并向服务端发送订阅配置请求,请求内容为 ListVersion>
  3. 当收到配置文件的推送消息时,向服务端拉取最新的配置文件

3.配置服务端视角

  1. 先检查客户端 ListVersion> 的请求里是否存在 File 版本号落后,如果存在,则立马响应 File -> NewVersion 内容给客户端
  2. 如果客户端配置文件版本号都是最新的,则在内存里维护 File -> List 的数据结构并 Hold 请求 30s。如果 30s 内有配置文件发布,则立马响应请求,返回 File -> NewVersion 给所有客户端.

4.发布推送配置简化流程

  1. 用户在界面点击发布按钮,服务端更新数据库里配置发布表的数据。配置发布表的核心字段:file, version, content, mtime
  2. 每个北极星服务端实例,都会定时1s扫描配置发布表,根据 mtime 捞出最近 1s 内变更过的数据
  3. 北极星服务端实例扫描到最新变更的数据之后
    1. 重新加载内存缓存.
    2. 向内存里的消息发布管道里写入一条消息
  4. 推送协程从消息发布管道里获取到消息,并消费消息。通过 File -> List 信息,获取所有订阅配置文件的客户端信息,并响应客户端 Hold 的请求

5.代码实战

1.环境准备

1.PolarisMesh安装方式可以看我之前的博客:polarismesh安装

2.版本对照表地址: 版本对照

Spring Cloud Tencent 版本支持 Spring Boot 版本Spring Cloud 版本Spring Boot 版本 Spring Framework 版本
1.12.4-2022.0.4(推荐)>=3.0.02022.0.4 3.1.26.0.11
1.11.9-2022.0.1>=3.0.02022.0.1 3.0.46.0.7
1.10.3-2022.0.1>=3.0.02022.0.1 3.0.46.0.7
1.9.0-2022.0.1>=3.0.02022.0.1 3.0.26.0.4
1.8.5-2022.0.1>=3.0.02022.0.1 3.0.26.0.4

在这里插入图片描述

3.老规矩创建一个微服务项目
注意:博主采用的是最新版jdk21和SpringBoot3实现的

springBoot3_jdk21_tencent ------------------- 父工程
├── t_server_address ------------------------- 提供者
├── t_server_user ------------------------------ 消费者
├── t_openFeign_api -------------------------- Feign接口

t_server_address工程的sql:

下面的sql是一对多关系,一个用户有多个地址

CREATE TABLE `address`  (`id` bigint(20) NOT NULL AUTO_INCREMENT,`user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID',`province` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '省',`city` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '市',`town` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '县/区',`mobile` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机',`street` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '详细地址',`contact` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系人',`is_default` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否是默认 1默认 0否',`notes` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE,INDEX `user_id`(`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;INSERT INTO `address` VALUES (59, 1, '北京', '北京', '朝阳区', '13900112222', '金燕龙办公楼', '李嘉诚', '0', NULL);
INSERT INTO `address` VALUES (60, 1, '北京', '北京', '朝阳区', '13700221122', '修正大厦', '李佳红', '0', NULL);
INSERT INTO `address` VALUES (61, 2, '上海', '上海', '浦东新区', '13301212233', '航头镇航头路', '李佳星', '1', NULL);
INSERT INTO `address` VALUES (63, 3, '广东', '佛山', '永春', '13301212233', '永春武馆', '李小龙', '0', NULL);
SET FOREIGN_KEY_CHECKS = 1;

t_server_user工程的sql


DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` bigint(20) NOT NULL AUTO_INCREMENT,`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',`password` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码,加密存储',`phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '注册手机号',`create_time` datetime NOT NULL COMMENT '创建时间',`update_time` datetime NOT NULL,`status` int(11) NULL DEFAULT 1 COMMENT '使用状态(1正常 2冻结)',`balance` int(11) NULL DEFAULT NULL COMMENT '账户余额',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
INSERT INTO `user` VALUES (1, 'Jack', '123456', '13900112224', '2017-08-19 20:50:21', '2017-08-19 20:50:21', 1, 838500);
INSERT INTO `user` VALUES (2, 'Rose', '123456', '13900112223', '2017-08-19 21:00:23', '2017-08-19 21:00:23', 1, 1000000);
INSERT INTO `user` VALUES (3, 'Hope', '123456', '13900112222', '2017-08-19 22:37:44', '2017-08-19 22:37:44', 1, 1000000);
INSERT INTO `user` VALUES (4, 'Thomas', '123456', '17701265258', '2017-08-19 23:44:45', '2017-08-19 23:44:45', 1, 1000000);
SET FOREIGN_KEY_CHECKS = 1;

3.所有工程的坐标
父工程

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.andy</groupId><artifactId>springBoot3_jdk21_tencent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>t_server_user</module><module>t_server_address</module><module>t_openFeign_api</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version><relativePath/></parent><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-cloud.version>2022.0.0</spring-cloud.version><spring-cloud-tencent.version>1.12.3-2022.0.4</spring-cloud-tencent.version></properties><dependencyManagement><!--rest--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency><!--spring-cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--spring-cloud-tencent--><dependency><groupId>com.tencent.cloud</groupId><artifactId>spring-cloud-tencent-dependencies</artifactId><version>${spring-cloud-tencent.version}</version><type>pom</type><scope>import</scope></dependency><!--spring-cloud-tencent所有的模块--><dependency><groupId>com.tencent.cloud</groupId><artifactId>spring-cloud-starter-tencent-all</artifactId></dependency></dependencies></dependencyManagement>
</project>

t_server_user工程

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.andy</groupId><artifactId>springBoot3_jdk21_tencent</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>t_server_user</artifactId><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- springboot数据基本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</artifactId><version>3.1.2</version></dependency><!-- mysql  与安装的版本要相同 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><!-- fastjson2 --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.35</version></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version></dependency><!-- tencent所有依赖 --><dependency><groupId>com.tencent.cloud</groupId><artifactId>spring-cloud-starter-tencent-all</artifactId><version>1.12.3-2022.0.4</version></dependency><!-- bootstrap --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.1.2</version></dependency><!-- openFeign_api --><dependency><groupId>com.andy</groupId><artifactId>t_openFeign_api</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- loadbalancer --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency></dependencies></project>

t_server_address工程

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.andy</groupId><artifactId>springBoot3_jdk21_tencent</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>t_server_address</artifactId><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- springboot数据基本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</artifactId><version>3.1.2</version></dependency><!-- mysql  与安装的版本要相同 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><!-- fastjson2 --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.35</version></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version></dependency><!-- druid连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version></dependency><!-- tencent所有依赖 --><dependency><groupId>com.tencent.cloud</groupId><artifactId>spring-cloud-starter-tencent-all</artifactId><version>1.12.3-2022.0.4</version></dependency><!-- bootstrap --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.1.2</version></dependency></dependencies>
</project>

t_openFeign_api工程

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.andy</groupId><artifactId>springBoot3_jdk21_tencent</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>t_openFeign_api</artifactId><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--Open feign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies></project>

2.服务注册与发现

1.关于pojo,mapper,service和controler层的代码省略。这4层的代码我相信给位大佬在学习nacos或者用springBoot集成mybatis-plus都搭建过,并且比博主玩的更溜。博主在这里只写application层和配置文件bootstrap.yml

  • t_server_user的配置文件
server:port: 18081
spring:application:name: t-user   #注意这里的服务名称不要写下滑线,要不然openFeign会报错的cloud:polaris:address: grpc://192.168.6.210:8091      # PolarisMesh的连接namespace: andy_namespace               # 命名空间,和nacos的namespace一样           config:namespace: andy_namespacegroups:                               # 组- name: t_user                      # 配置文件在哪个组中files: ["application.yml"]        # 配件文件  这里是数组,如果配置中心有多个用逗号分开

友情提示:
在这里插入图片描述

  • t_server_addressr的配置文件
server:port: 18080
spring:application:name: t-addresscloud:polaris:address: grpc://192.168.6.210:8091namespace: andy_namespaceconfig:auto-refresh: truegroups:- name: t_userfiles: ["application.yml"]

2.编写t_server_address和t_server_user的启动类
t_server_address工程

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

t_server_user工程

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

3.在PolarisMesh创建配置文件

  • 创建一个命名空间

在这里插入图片描述
在这里插入图片描述

  • 新建配置组
    在这里插入图片描述
    在这里插入图片描述

  • 点击t_user进入
    在这里插入图片描述

  • 点击新增后在配置文件名中数据我们在bootstrap.yml文件配置的文件名,并且提交
    在这里插入图片描述

  • 点击配置文件名称后,再次点击编辑
    在这里插入图片描述

  • 输入数据库配置后点击保存
    在这里插入图片描述

  • 最后点击发布,输入版本号,一路下一步就可以了
    在这里插入图片描述

4.启动项目,验证是否注册成功

在这里插入图片描述

3.远程调用

1.坐标我们在环境准备中有导入了

2.在t-server_user项目中编写Feign接口:

@FeignClient(value = "t-address")
public interface AddressApi {@RequestMapping("/address/findByUserId/{id}")List<Address> findByUserId(@PathVariable("id")Long id);
}

3.在service层调用

@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {@Resourceprivate UserMapper userMapper;@Resourceprivate AddressApi addressApi;@Overridepublic User findById(Long id) {User user = userMapper.selectById(id);List<Address> byUserId = addressApi.findByUserId(user.getId());user.setUserList(byUserId);return user;}
}

4.在t_server_user项目的启动类上添加注解

@EnableFeignClients(basePackages = "com.andy.tencent.cloud.feign")

t_server_user项目的启动类完整代码

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.andy.tencent.cloud.feign")
public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}
}

5.启动项目测试
在这里插入图片描述

相关文章:

SpringCloudTencent(上)

SpringCloudTencent 1.PolarisMesh介绍2.北极星具备的功能3.北极星包含的组件4.功能特性1.服务管理1.服务注册2.服务发现3.健康检查 2.配置管理 5.代码实战1.环境准备2.服务注册与发现3.远程调用 1.PolarisMesh介绍 1.北极星是腾讯开源的服务治理平台&#xff0c;致力于解决分…...

linux硬盘挂载(linux 修改某个磁盘挂载到新目录)

文章目录 什么是硬盘挂载linux 修改某个磁盘挂载到新目录 什么是硬盘挂载 在Linux操作系统中&#xff0c;挂载硬盘是将硬盘的分区或者整个硬盘与文件系统关联起来&#xff0c;使得我们可以通过文件系统访问硬盘中的数据。 确认硬盘信息 sudo fdisk -l该命令会列出所有已连接…...

hdlbits系列verilog解答(always块case语句)-33

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 Verilog 中的 case 语句几乎等同于 if-elseif-else 序列,该序列将一个表达式与其他表达式列表进行比较。它的语法和功能与 C 中的 switch 语句不同。 always @(*) begin // This is a combinational circuit …...

3D医学三维技术影像PACS系统源码

一、系统概述 3D医学影像PACS系统&#xff0c;它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成&#xff0c; 具有完善的影像数据库管理功能&#xff0c;强大…...

python 之softmx 函数

文章目录 总的介绍小应用 总的介绍 Softmax函数是一个常用的激活函数&#xff0c;通常用于多类别分类问题中。它将一个实数向量转换为概率分布。这个函数的输出是一个概率分布&#xff0c;表示输入样本属于每个可能类别的概率。 给定一个具有 (K) 个不同数值的实数向量 z (z1…...

第3章_基本select语句

文章目录 SQL概述SQL背景知识SQL分类 SQL语言的规则与规范SQL语言的规则SQL大小写规范注释命令规则&#xff08;暂时了解&#xff09;数据导入指令 基本的select语句select ...select ... from列的别名去除重复行空值参与运算着重号查询常数 显示表结构讲课代码课后练习 SQL概述…...

GPT3.5+文心一言+chatGLM 计算和代码生成能力简单对比

chatGLM3刚发布&#xff08;10.27&#xff09;&#xff0c;打算尝试一下其code和计算能力。 共选取三个问题&#xff0c;难度从中等&#xff0c;偏困难&#xff0c;到困难。测试内容是正好手头上在做的事想让LLM来完成&#xff08;偷懒&#xff09;&#xff0c;之前都是直接使…...

手搓一个ubuntu自动安装python3.9的sh脚本

#!/bin/bash# Step 1: 更新系统软件包 sudo apt update sudo apt upgrade -y sudo apt install -y software-properties-common# Step 2: 安装Python 3.9的依赖项 sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libread…...

volte使用方法 nodejs版本切换

Volta 一种轻松管理 JavaScript 命令行工具的方法。 文档 https://docs.volta.sh/guide/ 源码 https://github.com/volta-cli/volta 命令行 安装版本 此方法运行完会配置为默认版本 volta install node 安装最新版本的node volta install node14 安装指定版本的node volta i…...

Oracle安全基线检查

一、账户安全 1、禁止SYSDBA用户远程连接 用户具备数据库超级管理员(SYSDBA)权限的用户远程管理登录SYSDBA用户只能本地登录,不能远程。REMOTE_LOGIN_PASSWORDFILE函数的Value值为NONE。这意味着禁止共享口令文件,只能通过操作系统认证登录Oracle数据库。 1)检查REMOTE…...

@Slf4j将日志记录到磁盘和数据库

文章目录 1、背景介绍2、存本地2.1、配置文件2.2、使用 3、存数据库3.1、配置文件改造3.2、过滤器编写3.3、表准备3.4、添加依赖3.5、测试 4、优化4.1、日志定期删除 1、背景介绍 现在我一个SpringBoot项目想记录日志&#xff0c;大概可以分为下面这几种&#xff1a; 用户操作…...

2023年中国制糖行业研究报告

第一章 行业概况 1.1 定义 制糖行业是指以甘蔗、甜菜等为主要原料&#xff0c;通过一系列的工艺流程&#xff0c;生产糖以及相关副产品的产业。它是食品工业的重要组成部分&#xff0c;为人们日常生活中的甜蜜体验提供了必不可少的物质基础。 主要原料&#xff1a; 制糖行业…...

从使用的角度看 ByConity 和 ClickHouse 的差异

自 ClickHouse Inc 宣布其重要新功能仅在 ClickHouse Cloud 上开放以来&#xff0c;一些关注 ByConity 开源的社区小伙伴也来询问 ByConity 后续开源规划。为回答社区疑问&#xff0c;我们将之前分享的关于 ByConity 与 ClickHouse 相关功能对比的 webinar 整理为文章&#xff…...

Eureka处理流程

1、Eureka Server服务端会做什么 1、服务注册 Client服务提供者可以向Server注册服务&#xff0c;并且内部有二层缓存机制来维护整个注册表&#xff0c;注册表是Eureka Client的服务提供者注册进来的。 2、提供注册表 服务消费者用来获取注册表 3、同步状态 通过注册、心跳机制…...

排序算法

文章目录 P1271 【深基9.例1】选举学生会选择排序、冒泡排序、插入排序快速排序排序算法的应用[NOIP2006 普及组] 明明的随机数[NOIP2007 普及组] 奖学金P1781 宇宙总统 #mermaid-svg-Zo8AMme5IW1JlT6K {font-family:"trebuchet ms",verdana,arial,sans-serif;font-s…...

华为政企光传输网络产品集

产品类型产品型号产品说明 maintainProductEA5800-X15 典型配置 上行160G 下行64口GPON 16口XGS PONEA5800系列多业务接入设备定位为面向NG-PON的下一代OLT&#xff0c;基于分布式架构&#xff0c;运用虚拟接入技术&#xff0c;为用户提供宽带、无线、视频回传等多业务统一承…...

四路IC卡读卡器通信协议

1、摘要 Sle4442卡为256字节加密卡&#xff0c;存在读数据、写数据、保护数据以及密码操作。该卡在密码验证之前数据为只读状态&#xff0c;需要写入数据必须先进行密码验证&#xff0c;密码为3个字节&#xff0c;新卡初始密码为0xff&#xff0c;0xff&#xff0c;0xff。该读卡器…...

JavaFX作业

前言&#xff1a; 在写这个作业之前&#xff0c;尝试在JavaFX中添加全局快捷键&#xff0c;测试了大概5个小时&#xff0c;到处找教程换版本&#xff0c;结果最后还是没找到支持Java8以上的&#xff08;也有可能是我自己的问题&#xff09;&#xff0c;最后只能退而求其次&…...

【使用Python编写游戏辅助工具】第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具

前言 这里是【使用Python编写游戏辅助工具】的第五篇&#xff1a;打造交互式游戏工具界面&#xff1a;PySide6/PyQT高效构建GUI工具。本文主要介绍使用PySide6来实现构建GUI工具。 在前面&#xff0c;我们实现了两个实用的游戏辅助功能&#xff1a; 由键盘监听事件触发的鼠标连…...

06.Oracle数据备份与恢复

Oracle数据备份与恢复 一、通过RMAN方式备份二、使用emp/imp和expdb/impdb工具进行备份和恢复三、使用Data guard进行备份与恢复 一、通过RMAN方式备份 通过 RMAN&#xff08;Oracle 数据库备份和恢复管理器&#xff09;方式备份 Oracle 数据库&#xff0c;可以使用以下步骤&a…...

大航海时代Ⅳ 威力加强版套装 HD Version (WinMac)中文免安装版

《大航海时代》系列的人气SRPG《大航海时代IV》以HD的新面貌再次登场&#xff01;本作品以16世纪的欧洲“大航海时代”为舞台&#xff0c;玩家将以探险家、商人、军人等不同身份与全世界形形色色的人们一起上演出跌宕起伏的海洋冒险。游戏中玩家的目的是在不同的海域中掌握霸权…...

微信小程序 uCharts的使用方法

一、背景 微信小程序项目需要渲染一个柱状图&#xff0c;使用uCharts组件完成 uCharts官网指引&#x1f449;&#xff1a;uCharts官网 - 秋云uCharts跨平台图表库 二、实现效果 三、具体使用 进入官网查看指南&#xff0c;有两种方式进行使用&#xff1a;分别是原生方式与组…...

面试算法54:所有大于或等于节点的值之和

题目 给定一棵二叉搜索树&#xff0c;请将它的每个节点的值替换成树中大于或等于该节点值的所有节点值之和。假设二叉搜索树中节点的值唯一。例如&#xff0c;输入如图8.10&#xff08;a&#xff09;所示的二叉搜索树&#xff0c;由于有两个节点的值大于或等于6&#xff08;即…...

七月论文审稿GPT第二版:从Meta Nougat、GPT4审稿到LongLora版LLaMA、Mistral

前言 如此前这篇文章《学术论文GPT的源码解读与微调&#xff1a;从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述&#xff0c;对于论文的摘要/总结、对话、翻译、语法检查而言&#xff0c;市面上的学术论文GPT的效果虽暂未有多好&#xff0c;可至少还过得去&am…...

PyTorch入门学习(十二):神经网络-搭建小实战和Sequential的使用

目录 一、介绍 二、先决条件 三、代码解释 一、介绍 在深度学习领域&#xff0c;构建复杂的神经网络模型可能是一项艰巨的任务&#xff0c;尤其是当您有许多层和操作需要组织时。幸运的是&#xff0c;PyTorch提供了一个方便的工具&#xff0c;称为Sequential API&#xff0c…...

Linux shell编程学习笔记20:case ... esac、continue 和break语句

一、case ... esac语句说明 在实际编程中&#xff0c;我们有时会请到多条件多分支选择的情况&#xff0c;用if…else语句来嵌套处理不烦琐&#xff0c;于是JavaScript等语言提供了多选择语句switch ... case。与此类似&#xff0c;Linux Shell脚本编程中提供了case...in...esa…...

树莓派4无法进入桌面模式(启动后出现彩色画面,然后一直黑屏,但是可以正常启动和ssh)

本文记录了这段比较坎坷的探索之路&#xff0c;由于你的问题不一定是我最终解决方案的&#xff0c;可能是前面探索路上试过的&#xff0c;所以建议按顺序看排除前置问题。 双十一又买了个树莓派 4B&#xff0c;插上之前树莓派 4B 的 TF 卡直接就能使用&#xff08;毕竟是一样规…...

花草世界生存技能

多菌灵 杀菌常用 阿维菌素 杀虫常用 除蚜虫 吡虫啉 有毒性 内吸性&#xff08;植物吸收&#xff09; 苦参碱 无毒&#xff0c;中药提取 内吸性药 吡虫啉&#xff0c;噻虫嗪、啶虫脒、苦参碱 栀子花 春秋花后修剪 牡丹 秋冬种植&#xff1b; 洛阳产地&#xff1b; 肥料 …...

执行npm install时老是安装不成功node-sass的原因和解决方案

相信你安装前端项目所需要的依赖包&#xff08;npm install 或 yarn install&#xff09;时&#xff0c;有可能会出现如下报错&#xff1a; D:\code\**project > yarn install ... [4/4] Building fresh packages... [-/6] ⠁ waiting... [-/6] ⠂ waiting... [-/6] ⠂ wai…...

【MongoDB】集群搭建实战 | 副本集 Replica-Set | 分片集群 Shard-Cluster | 安全认证

文章目录 MongoDB 集群架构副本集主节点选举原则搭建副本集主节点从节点仲裁节点 连接节点添加副本从节点添加仲裁者节点删除节点 副本集读写操作副本集中的方法 分片集群分片集群架构目标第一个副本集第二个副本集配置集初始化副本集路由集添加分片开启分片集合分片删除分片 安…...