优化网站设计,衡阳市网站建设公司,网站一次性链接怎么做,蜜雪冰城推广软文SpringCloudTencent 1.PolarisMesh介绍2.北极星具备的功能3.北极星包含的组件4.功能特性1.服务管理1.服务注册2.服务发现3.健康检查 2.配置管理 5.代码实战1.环境准备2.服务注册与发现3.远程调用 1.PolarisMesh介绍
1.北极星是腾讯开源的服务治理平台#xff0c;致力于解决分… 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.通过服务框架注册
服务框架会提供通用的服务注册接口供应用在拉起的时候自动往注册中心注册北极星对主流的服务框架SpringCloudDubbogRPC做了适配用户无需修改业务逻辑代码只需引入北极星的框架扩展库即可实现自动注册
5.通过k8s同步的方式注册用户通过k8s部署服务并注册为k8s的service北极星通过controller的机制从k8s中将service和endpoint信息同步到北极星完成服务注册 6.通过OpenAPI注册:北极星控制面提供基于Rest标准的OpenAPI用户可通过OpenAPI完成服务注册的操作
2.服务发现 服务发现指的主调方是根据服务名标识拉取服务实例列表以供后续进行服务调用的操作 1.服务发现的方式 2.通过SDK进行服务发现
北极星提供了多语言SDKSDK通过ConsumerAPI提供3个接口进行服务发现 getAllInstances获取服务下全量的服务实例列表不做任何过滤。getHealthyInstances获取服务下健康的服务实例列表只包含健康实例不包含被熔断、不健康、隔离、权重为0的实例。getOneInstances针对健康的服务实例列表进行动态路由和负载均衡返回单个可用的服务实例。
3.通过服务框架进行服务发现
服务框架会提供通用的服务发现接口应用在RPC之前会自动进行服务发现获取到可用的实例进行RPC调用北极星对主流的服务框架SpringCloudDubbogRPC做了适配用户无需修改业务逻辑代码只需引入北极星的框架扩展库即可实现自动发现
4.使用DNS进行服务发现北极星通过polaris-sidecar提供DNS功能用户程序可以通过DNS域名访问的方式实现无侵入的服务发现
5.使用OpenAPI服务发现北极星控制面提供基于Rest标准的OpenAPI用户可通过OpenAPI完成服务发现的操作
3.健康检查 健康检查提供了一种机制使得控制面可以在一定时间段内感知服务实例出现异常从而将异常节点剔除并通知给所有的消费者 心跳上报:服务实例持续上报心跳给控制面并与控制面约定TTL的时间段控制面检查服务实例的心跳上报时间点当发现当前时间相比实例最后一次上报时间已经超过3*TTL就将实例标记为不健康并通知给该服务的消费者 2.配置管理
1.结构图
2.客户端视角
应用启动时同步从服务端拉取一次配置获取最新的配置内容把第一步拉取到的所有的配置文件生成 ListVersion 的数据 并向服务端发送订阅配置请求请求内容为 ListVersion当收到配置文件的推送消息时向服务端拉取最新的配置文件
3.配置服务端视角
先检查客户端 ListVersion 的请求里是否存在 File 版本号落后如果存在则立马响应 File - NewVersion 内容给客户端如果客户端配置文件版本号都是最新的则在内存里维护 File - List 的数据结构并 Hold 请求 30s。如果 30s 内有配置文件发布则立马响应请求返回 File - NewVersion 给所有客户端.
4.发布推送配置简化流程
用户在界面点击发布按钮服务端更新数据库里配置发布表的数据。配置发布表的核心字段file, version, content, mtime每个北极星服务端实例都会定时1s扫描配置发布表根据 mtime 捞出最近 1s 内变更过的数据北极星服务端实例扫描到最新变更的数据之后 重新加载内存缓存.向内存里的消息发布管道里写入一条消息 推送协程从消息发布管道里获取到消息并消费消息。通过 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.111.11.9-2022.0.13.0.02022.0.1 3.0.46.0.71.10.3-2022.0.13.0.02022.0.1 3.0.46.0.71.9.0-2022.0.13.0.02022.0.1 3.0.26.0.41.8.5-2022.0.13.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 version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.andy/groupIdartifactIdspringBoot3_jdk21_tencent/artifactIdversion1.0-SNAPSHOT/versionpackagingpom/packagingmodulesmodulet_server_user/modulemodulet_server_address/modulemodulet_openFeign_api/module/modulesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.1.2/versionrelativePath//parentpropertiesmaven.compiler.source21/maven.compiler.sourcemaven.compiler.target21/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingspring-cloud.version2022.0.0/spring-cloud.versionspring-cloud-tencent.version1.12.3-2022.0.4/spring-cloud-tencent.version/propertiesdependencyManagement!--rest--dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-rest/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bootstrap/artifactId/dependency!--spring-cloud--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency!--spring-cloud-tencent--dependencygroupIdcom.tencent.cloud/groupIdartifactIdspring-cloud-tencent-dependencies/artifactIdversion${spring-cloud-tencent.version}/versiontypepom/typescopeimport/scope/dependency!--spring-cloud-tencent所有的模块--dependencygroupIdcom.tencent.cloud/groupIdartifactIdspring-cloud-starter-tencent-all/artifactId/dependency/dependencies/dependencyManagement
/projectt_server_user工程
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.andy/groupIdartifactIdspringBoot3_jdk21_tencent/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdt_server_user/artifactIdpropertiesmaven.compiler.source21/maven.compiler.sourcemaven.compiler.target21/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencies!-- springboot数据基本 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-rest/artifactIdversion3.1.2/version/dependency!-- mysql 与安装的版本要相同 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.32/version/dependency!-- fastjson2 --dependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactIdversion2.0.35/version/dependency!-- mybatis-plus --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3/version/dependency!-- tencent所有依赖 --dependencygroupIdcom.tencent.cloud/groupIdartifactIdspring-cloud-starter-tencent-all/artifactIdversion1.12.3-2022.0.4/version/dependency!-- bootstrap --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bootstrap/artifactIdversion3.1.2/version/dependency!-- openFeign_api --dependencygroupIdcom.andy/groupIdartifactIdt_openFeign_api/artifactIdversion1.0-SNAPSHOT/version/dependency!-- loadbalancer --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-loadbalancer/artifactId/dependency/dependencies/projectt_server_address工程
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.andy/groupIdartifactIdspringBoot3_jdk21_tencent/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdt_server_address/artifactIdpropertiesmaven.compiler.source21/maven.compiler.sourcemaven.compiler.target21/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencies!-- springboot数据基本 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-rest/artifactIdversion3.1.2/version/dependency!-- mysql 与安装的版本要相同 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.32/version/dependency!-- fastjson2 --dependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactIdversion2.0.35/version/dependency!-- mybatis-plus --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3/version/dependency!-- druid连接池 --dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.16/version/dependency!-- tencent所有依赖 --dependencygroupIdcom.tencent.cloud/groupIdartifactIdspring-cloud-starter-tencent-all/artifactIdversion1.12.3-2022.0.4/version/dependency!-- bootstrap --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bootstrap/artifactIdversion3.1.2/version/dependency/dependencies
/project
t_openFeign_api工程
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.andy/groupIdartifactIdspringBoot3_jdk21_tencent/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdt_openFeign_api/artifactIdpropertiesmaven.compiler.source21/maven.compiler.sourcemaven.compiler.target21/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencies!--Open feign--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency/dependencies/project2.服务注册与发现
1.关于pojomapperservice和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})ListAddress findByUserId(PathVariable(id)Long id);
}3.在service层调用
Service
Transactional(rollbackFor Exception.class)
public class UserServiceImpl extends ServiceImplUserMapper, User implements IUserService {Resourceprivate UserMapper userMapper;Resourceprivate AddressApi addressApi;Overridepublic User findById(Long id) {User user userMapper.selectById(id);ListAddress 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.启动项目测试