陆代表什么数字| 小孩子流鼻血是什么原因引起的| 什么茶叶降血压最好| 梦到鳄鱼是什么意思| 尿潜血十一是什么意思| 南瓜子吃多了有什么副作用| 构树是什么树| 单纯疱疹病毒是什么病| 晚上睡觉流口水是什么原因| 义父什么意思| 腺样体面容是什么意思| 什么叫情商| 雅蠛蝶什么意思| 什么是冷战| 粉刺长什么样图片| 9月14号是什么星座| 指甲长出来是白色的什么原因| us是什么单位| 进去是什么感觉| 阴虚火旺吃什么中成药好| 腘窝囊肿是什么原因引起的| 自言自语说话是什么病| 肠痈是什么病| 手足口病吃什么药最好| 王爷的儿子叫什么| 家政是什么工作| 画蛇添足是什么生肖| 笄礼是什么意思| 肾阳虚喝什么泡水最好| 烧碱是什么| 处大象是什么意思| 子宫粘连是什么原因引起的| 牡丹什么意思| 饕餮是什么| ITIB跟薇娅什么关系| 八月十日是什么星座| 百什么争鸣| 吃南瓜有什么好处和坏处| 头疼检查什么项目| 月经期间吃什么好| 血糖高喝什么酒好| 葛根在农村叫什么| 有容乃大是什么意思| 金融办是什么单位| 什么人不适合吃胃复春| 胎盘内血池是什么| 文盲是什么意思| 属马的和什么属相不合| 3.1是什么星座| 脑膜炎是什么原因引起的| 医院什么时候下班| 雨像什么| 阳春白雪是什么意思| 主管是什么级别| 心脏跳快吃什么药好| 术后吃什么营养品好| 肌肤甲错是什么意思| 试纸一条红杠是什么意思| 什么叫偏光眼镜| 什么人容易得红斑狼疮| 佛家思想的核心是什么| 满月针最晚什么时候打| 公主是什么意思| 腹泻能吃什么水果| 心烦意乱是什么意思| 男朋友昵称叫什么好听| 愿力是什么意思| 韩红是什么民族| 干预治疗是什么意思| 腮腺炎挂什么科| 皮肤过敏不能吃什么食物| 金族念什么| 82年属什么的生肖| 中元节不能穿什么衣服| 阴虚火旺吃什么中药| swissmade是什么意思| 运营商是什么意思| 梅花鹿吃什么食物| 威胁什么意思| 月经不来又没怀孕是什么原因| 为什么外阴老是长疖子| 荨麻疹擦什么药| 高血压吃什么好降压快| 鲷鱼是什么鱼| urban是什么牌子| 什么叫认知能力| 身强力壮是什么生肖| 甘油三酯偏高是什么原因| 学业有成是什么意思| 精神病是什么意思| 子时是什么时候| 奥利司他排油是什么油| 碳酸钠为什么显碱性| 尿白细胞高是什么原因| 糖醇是什么意思| 白细胞高一点点是什么原因| 毛肚是什么动物身上的| 1968年什么时候退休| 万事达卡是什么卡| 精血亏虚吃什么中成药| fomo是什么意思| 怀孕了为什么还会出血| 什么情况吃通宣理肺丸| 三次元是什么意思| 婴幼儿吃什么奶粉好| 男生圆脸适合什么发型| 老实忠厚是什么生肖| 霉菌性阴道炎用什么药最好| 肚子有硬块是什么原因| 无缘无故头疼是什么原因| vb是什么意思| 补办医保卡需要什么资料| 什么叫做流年| 八月二十六是什么星座| 偶发房性早搏是什么意思| 为什么一睡觉就做梦| 十月十一日是什么星座| 滇红是什么茶| 分拣员是做什么的| 心脏房颤吃什么药好| 牙龈发炎是什么原因| 什么钓鱼愿者上钩| 双氢克尿噻又叫什么| 朋友梦到我怀孕了是什么意思| 为什么听力会下降| 血脂高吃什么食物好| 溢脂性皮炎用什么药| 星期一右眼皮跳是什么预兆| 男人吃什么壮阳最快| 精力是什么意思| 妇科菌群失调吃什么药| 网络维护是做什么的| 什么是马赛克| 89年的属什么| 奇亚籽有什么功效| 地级市市委书记是什么级别| 一年一片避孕药叫什么| 压床是什么意思| 腹主动脉钙化是什么意思| 血压高是什么原因引起的| 电荷是什么意思| 空腹打嗝是什么原因引起的| 睡觉做噩梦是什么原因| 肾病有什么症状| 嘴角疱疹用什么药膏| 男人吃什么可以增强性功能| 敌敌畏中毒用什么洗胃| 九四年属什么生肖| 行为艺术是什么意思| 膀胱炎尿道炎吃什么药| 什么有什么造句| 梦见手表是什么意思| 消业障是什么意思| 什么是疱疹怎么得的| 神是什么| 大肠湿热吃什么中成药| hpm是什么意思| 金相是什么意思| 梦到死人是什么预兆| 金目念什么| 餐后胆囊是什么意思| 海参吃什么| 盐冻虾是什么意思| 什么汤有营养| pbs是什么| 回门是什么意思| 骨质增生吃什么药效果好| 吃什么会变胖| 构筑物是什么意思| 朝鲜为什么那么落后| 内角是什么意思| 全飞秒手术是什么| 土羊是什么字| 女生流白带意味着什么| 经典什么意思| 避孕药什么时候吃有效| 夜盲症缺什么维生素| 京东积分有什么用| 鹦鹉吃什么水果| 流鼻血是什么原因引起的| 东北方向五行属什么| 查甲功是什么意思| 什么叫打板| 海参不适合什么人吃| 奉天为什么改名沈阳| 士字五行属什么| 疣有什么危害| 如愿以偿是什么意思| 拔牙后可以吃什么食物| 腺体增生是什么意思| 头疼想吐吃什么药| 女人右眼跳是什么预兆| 葡萄糖偏高是什么原因| 肖战是什么星座| 什么湖什么海| 止咳化痰吃什么好| 胃火旺吃什么药| 男同性恋叫什么| 什么叫收缩压和舒张压| 肺虚吃什么药| 海的尽头是什么| 脸上浮肿是什么原因导致的| 为什么会有甲状腺结节| 柯基犬为什么要断尾巴| 猪肉炒什么菜好吃| 舒克是什么职业| 糖尿病能吃什么零食| 男人脖子后面有痣代表什么| 棕榈油是什么油| 子宫内膜厚有什么症状| 答辩是什么| 排卵试纸阴性是什么意思| 什么是普世价值| 什么不迫| 送朋友鲜花送什么花| 火命人适合什么颜色| 黑五是什么时候| 疮疖是什么意思| 缺钠是什么原因造成的| 白细胞阳性什么意思| 做什么生意挣钱| 阴虱是什么样子图片| 榴莲树长什么样子图片| 壬子五行属什么| eos是什么| 拔罐起水泡是什么原因| 克罗心是什么档次| 火和什么相生| 痛风都不能吃什么东西| 急功近利什么意思| 益生菌什么牌子最好| 越五行属性是什么| 什么病不能吃鲤鱼| 胸口闷疼是什么原因| 梦见鼻子出血是什么意思| 睡觉腿麻是什么原因引起| 1992是什么年| 孩子多动缺什么| 玫瑰花代表什么意思| 蜗牛有什么特点| 长期做梦是什么原因| 男人性功能不好吃什么药| 脑梗死是什么意思| 1975年是什么年| 肝回声密集是什么意思| 苹果和什么榨汁减肥| 本科二批是什么意思| 苏打是什么| 眼睛模糊用什么药好| 长期服用丙戊酸钠有什么副作用| 精气是什么意思| 房颤吃什么药效果最好| 腘窝囊肿挂什么科| 55年属什么| 左小腿麻木是什么原因| 一望无际是什么意思| 什么人容易得肺结核| 小孩经常口腔溃疡是什么原因| 常打嗝是什么原因| 肠炎吃什么药| 返流性食管炎用什么药| 为什么夏天容易掉头发| 什么是基础医学| 胃痉挛吃什么药最有效| 百度

车讯:迷你型钢炮 大众up! GTi原型车官图曝光

开发 后端
本节主要以实现的形式通过高性能Poalris网关访问后端服务接口,对典型的正常和异常场景都进行了验证,结果都符合预期效果。
百度 具体而言,金三极战略分为三个版块区域金三极、产业金三极、金融金三极。

一、本节重点

实战通过高性能Polaris网关访问后端服务,深入理解高性能Polaris网关启动流程、请求路由转发流程和响应结果的流程设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

二、实战场景

本节,通过高性能网关访问后端服务接口主要验证如下几个简单的场景,验证高性能Polaris网关的核心功能:

  • 只启动后端服务,直接访问后端服务接口,正确返回hello polaris。
  • 启动网关和后端服务,通过网关访问后端服务接口,正确返回hello polaris。
  • 停止后端服务,通过网关访问后端服务接口,返回503:后端服务暂时不可用,请稍后再试。

三、服务规划

实战通过高性能Polaris网关访问后端服务的规划如下所示。

图片

四、测试服务实现

1.实现后端服务

用于测试的后端服务的实现比较简单,主要是通过SpringBoot快速实现一个访问接口。

源码详见:polaris-examples-http工程下的io.binghe.polaris.examples.http.controller.HttpController

@RestController
public class HttpController {
    @RequestMapping(value = "/http_test")
    public String helloPolaris(){
        return "hello polaris";
    }
}

就是这么简单,实现一个简单的HTTP接口用于测试即可,正常情况下,接口会返回hello polaris。

随后,基于SpringBoot实现后端服务的启动类即可。

源码详见:polaris-examples-http工程下的io.binghe.polaris.examples.http.HttpExampleStarter。

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

至此,后端服务实现完毕。

2.实现网关启动服务

由于Polaris网关在启动时,需要通过服务发现从注册中心获取后端服务调用器对象,后端服务的定义对象、网关过滤器规则、后端服务实例对象等,将其存放到本地缓存并定期更新。由于目前我们是测试网关访问后端服务的接口,先直接创建对应的实例对象放到本地缓存。

后续我们会通过SPI对接多个注册中心实现服务注册与发现,基于SPI对接多个配置中心,基于SPI实现多种负载均衡算法,实现熔断限流,实现网关热插拔插件,并且为了简化服务对接网关,也会专门设计和开发服务对接网关的SDK等等,妥妥的企业级网关。

好了,开始实现网关的启动服务。

源码详见:polaris-examples-http-gateway工程下的io.binghe.polaris.examples.http.HttpExampleGatewayStarter。

为了大家理解的更加清晰,这里,我对HttpExampleGatewayStarter类的实现方法进行拆解。

(1)实现main()方法

main()方法也是测试网关的启动服务的入口,主要实现如下所示。

public static void main(String[] args) {
    // 初始化后端服务相关配置
    initServiceConfig();
    // 启动网关
    startPolaris(args);
}

可以看到,在main()方法的实现中,主要调用了initServiceConfig()方法初始化后端服务配置,随后调用了startPolaris()方法加载网关的核心配置并启动网关。

(2)实现initServiceConfig()方法

initServiceConfig()方法是模拟服务发现加载后端服务配置的核心方法,这里,对initServiceConfig()方法的实现进行拆解。

定义基础变量

定义后端服务的基本信息,例如访问的后端接口path,服务id,版本号、唯一id、规则id、访问协议、目标后端服务地址等,源码如下所示。

// 接口path
String path = "/http_test";
String serviceId = "100001";
String version = "1.0.0";
String uniqueId = serviceId + ":" + version;
String ruleId = "10001";
String protocol = "http";
String targetAddress = "localhost:8080";

这里,需要注意的是通过网关访问后端服务时,请求头中需要携带uniqueId。

创建服务调用器对象

创建服务调用器对象的源码如下所示。

// 创建ServiceInvoker对象
ServiceInvoker serviceInvoker = new HttpServiceInvoker();
serviceInvoker.setInvokerPath(path);
serviceInvoker.setRuleId(ruleId);
serviceInvoker.setTimeout(5000);

可以看到,在serviceInvoker服务调用器对象中,主要封装了调用后端服务的path,规则id和超时时间。

创建服务定义对象

服务定义对象会注册到服务注册中心,是对后端服务的一种描述,会封装后端服务的详情信息,源码如下所示。

// 创建ServiceDefinition对象,后续注册到注册中心
ServiceDefinition serviceDefinition = new ServiceDefinition();
serviceDefinition.setServiceId(serviceId);
serviceDefinition.setVersion(version);
serviceDefinition.setUniqueId(uniqueId);
serviceDefinition.setProtocol(protocol);
serviceDefinition.setPatternPath(path);
serviceDefinition.setEnvType("local");
Map<String, ServiceInvoker> invokerMap = new HashMap<>();
invokerMap.put(path, serviceInvoker);
serviceDefinition.setInvokerMap(invokerMap);
ConfigCacheFactory.getInstance().putServiceDefinition(uniqueId, serviceDefinition);

可以看到,serviceDefinition服务定义对象中主要封装后端服务的定义信息,并切会封装封装后端服务path与服务调用器的关系,最终会将serviceDefinition服务定义对象存储到本地缓存。

实现规则定义

对过滤器的规则进行实现和封装,源码如下所示。

Set<FilterRule> filterRules = new HashSet<>();
FilterRule filterRule = new FilterRule();
filterRule.setId(FilterConstants.LOADBALANCER_FILTER_ID);
filterRule.setConfig("{\"balanceType\" : \"roundRibbonBalance\"}");
filterRules.add(filterRule);

filterRule = new FilterRule();
filterRule.setId(FilterConstants.HTTP_FILTER_ID);
filterRules.add(filterRule);

filterRule = new FilterRule();
filterRule.setId(FilterConstants.ERROR_FILTER_ID);
filterRules.add(filterRule);


Rule rule = new Rule(ruleId, "测试规则", protocol, serviceId, path, Arrays.asList(path), 1, filterRules);
ConfigCacheFactory.getInstance().putRule(ruleId, rule);

可以看到,这里会创建对个过滤器规则,将其封装到一个Set集合中,最终将Set集合封装到总体规则对象Rule中,并存储到本地缓存。

需要注意的是:每个规则的id需要对应过滤器实现类上@Filter注解的id属性的值。

实现服务实例对象

服务实例对象会注册到服务注册中心,这里模拟创建服务实例对象,并将其存储到本地缓存。源码如下所示。

ServiceInstance serviceInstance = new ServiceInstance();
serviceInstance.setInstanceId(targetAddress);
serviceInstance.setUniqueId(uniqueId);
serviceInstance.setAddress(targetAddress);
serviceInstance.setWeight(100);
serviceInstance.setRegisterTime(System.currentTimeMillis());
serviceInstance.setVersion(version);
ConfigCacheFactory.getInstance().addServiceInstance(uniqueId, serviceInstance);

可以看到,服务实例对象中封装了后端服务实例的具体信息,包括服务的目标地址,唯一id、权重、注册时间、版本号等,最终将服务实例存储到本地缓存。

(3)实现startPoalris()方法

startPoalris()方法是启动Poalris网关的核心方法,源码如下所示。

private static void startPolaris(String[] args) {
    // 加载配置
    PolarisConfig polarisConfig = PolarisConfigLoader.getInstance().loadConfig(args);
    // 初始化容器
    PolarisContainer container = new PolarisContainer(polarisConfig);
    // 启动容器
    container.start();
    // 优雅关闭
    Runtime.getRuntime().addShutdownHook(new Thread(container::shutdown));
}

相信小伙伴们对于startPolaris()方法的实现并不陌生,加载网关核心配置,创建并启动容器来驱动网关的运行,在优雅关闭中停止容器。

至此,高性能Polaris网关的测试程序实现完毕。

五、测试场景验证

接下来,对网关的测试场景进行验证。

场景一: 只启动后端服务,直接访问后端服务接口,正确返回hello polaris。

只启动后端服务后,通过Apifox访问http://localhost:8080/http_test,如下所示。

图片

测试结果符合预期,正确返回了hello polaris字符串。

场景二: 启动网关和后端服务,通过网关访问后端服务接口,正确返回hello polaris。

启动网关和后端服务后,通过Apifox访问http://localhost:10000/http_test,如下所示。

图片

测试结果符合预期,正确返回了hello polaris字符串。

场景三: 停止后端服务,通过网关访问后端服务接口,返回503:后端服务暂时不可用,请稍后再试。

停止后端服务后,通过Apifox访问http://localhost:10000/http_test,如下所示。

图片

测试结果符合预期,正确返回了503:后端服务暂时不可用,请稍后再试。

六、本节总结

本节主要以实现的形式通过高性能Poalris网关访问后端服务接口,对典型的正常和异常场景都进行了验证,结果都符合预期效果。

希望这节内容能够为大家带来实质性的收获,最后,可以在评论区写下你学完本章节的收获,祝大家都能学有所成,我们一起搞定高性能Polaris网关。

责任编辑:姜华 来源: 冰河技术
相关推荐

2025-08-06 08:00:54

2025-08-06 10:09:02

2025-08-06 08:06:53

网关高性能

2025-08-06 15:22:03

KotlinAndroid开发

2025-08-06 15:07:37

KotlinAndroid开发

2025-08-06 15:18:29

开发Node.js后端

2025-08-06 17:34:29

共享办公ideaPod文印

2025-08-06 08:22:50

MVCCMySQLC++

2025-08-06 07:46:09

服务器高并发高性能

2025-08-06 10:21:13

CPU高性能服务器

2025-08-06 09:10:11

Golang高性能缓存库

2025-08-06 18:22:19

2025-08-06 10:56:36

2025-08-06 08:18:51

Java

2025-08-06 00:00:05

高性能分布式IM

2025-08-06 16:35:42

AI训练模型

2025-08-06 11:20:48

2025-08-06 22:58:58

Push 推荐Java 开发vivo

2025-08-06 15:30:37

高性能计算技术

2025-08-06 09:14:29

点赞
收藏

51CTO技术栈公众号

hpv长什么样 户籍地是什么 秋分节气的含义是什么 什么的枫树 肠炎能吃什么
苹果和生姜煮水喝有什么功效 拉屎很臭是什么原因 心有不甘是什么意思 卵巢下降是什么原因 低度cin病变是什么意思
卵胎生是什么意思 例假吃什么水果好 肚脐眼叫什么穴位 七嘴八舌是什么生肖 国家三有保护动物是什么意思
脑脊液是什么颜色 什么颜色不显黑 soda是什么意思啊 什么是童话故事 排卵什么意思
巴旦木和杏仁有什么区别0297y7.com 举人相当于现在的什么官hcv8jop9ns1r.cn 16岁属什么hcv8jop7ns5r.cn 吽是什么意思hcv9jop5ns6r.cn 99年属什么的hcv7jop6ns6r.cn
伤官伤尽是什么意思hcv9jop5ns8r.cn 老年人流鼻血是什么原因hcv9jop5ns5r.cn 降压灵又叫什么hcv9jop1ns3r.cn 胰腺炎什么症状hcv8jop8ns5r.cn 僵尸肉吃了有什么危害hcv8jop8ns9r.cn
今天是什么日子啊hcv8jop8ns2r.cn 儿童上火吃什么药最好hcv8jop3ns7r.cn 男人右眼跳是什么预兆hcv8jop4ns8r.cn 鳞状上皮细胞高是什么原因hcv7jop6ns7r.cn 牛油果核有什么用hcv9jop8ns1r.cn
绽开什么hcv9jop3ns5r.cn 泡脚出汗有什么好处hcv8jop0ns0r.cn 什么治咳嗽最快最有效inbungee.com 炎细胞浸润是什么意思hcv9jop0ns5r.cn 股骨头疼痛吃什么药hcv8jop6ns1r.cn
百度