Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 网关

    • Api-gateway-core
    • Api-gateway-center
    • Api-gateway-assist
    • Api-gateway-sdk
      • 1.RPC应用接口自动注册SDK
        • SpringBoot-starter最佳实践:启动前
        • SpringBoot-starter最佳实践:启动后
      • 2.EnableConfigurationProperties加载时机
      • 3.HttpUtil#post
      • 4.算力关联、接口上报、调用反馈
    • 部署配置
  • 抽奖

  • 电商

  • 外卖

  • 项目笔记
  • 网关
phan
2023-05-15
目录

Api-gateway-sdk

# Api-gateway-sdk

# 1.RPC应用接口自动注册SDK

功能:实现RPC服务接口Spring启动后自动注册功能。

可以预见到后续也需要有一个SDK注册引擎(Dubbo服务Provider),启动后拿到所有RPC接口的信息,并向注册中心的RPC服务注册接口发送请求。

# SpringBoot-starter最佳实践:启动前

  • 参数读取并加载

①application.yml参数:通过@ConfigurationProperties注解的属性配置类获取,并在配置类中@Enable加入Spring容器管理。

②@Annotation注解型参数:在实现BeanPostProcessor的初始化服务类中解析获取。在每个Bean的初始化后置增强方法postProcessAfterInitialization中,拦截每一个Bean(包含service,component..注解并交给spring管理的类),进行类注解和方法注解的判断,最后取出注解中的参数。

  • 执行初始化方法与处理逻辑

最关键的一点,执行初始化方法处理的对象一定只能是@Bean注解的交给Spring容器管理的对象。

①BeanPostProcessor:在初始化前置后置方法实现初始化。

②ApplicationListener:通过Bean生命周期事件的发布触发监听器处理方法。

③ApplicationContextAware:容器感知扩展点,本质是执行初始化前置增强beanPostProcessorsBeforeInitialization。

④@Bean:以Bean方法的形式执行处理方法,最终返回值作为Bean交给容器管理。

# SpringBoot-starter最佳实践:启动后

  • AOP切面

对切面类添加增强方法,用户调用切面AOP代理对象的方法时,触发切面处理逻辑。

# 2.EnableConfigurationProperties加载时机

ConfigurationPropertiesBeanRegistrar:找到@ConfigurationProperties注解的类,并创建对应的BeanDefinition,注册bean定义。

ConfigurationPropertiesBindingPostProcessor:首先在成员属性复制后afterPropertiesSet获取bingder。在postProcessBeforeInitialization初始化前增强方法中,通过bind方法将@ConfigurationProperties注解bean和配置文件属性绑定。

# 3.HttpUtil#post

  • HttpUtil#post

Hutool工具包发送Post请求,其中入参接收一个封装了所有请求参数的Map对象。这种方式的Content-Type为application/x-www-form-urlencoded,controller可以直接使用自定义对象接收(不能用@RequestBody接收)。

  • @RequestMapping(consumes="application/json",produces="")

produces用来指明controller方法返回响应的编码类型是json格式。

consumes指定处理请求的提交内容类型(Content-Type)

# 4.算力关联、接口上报、调用反馈

  • 算力关联

功能:注册中心gateway-center给后台管理系统gateway-admin提供算力分配表的数据插入方法,手动将网关算力节点与RPC服务接口关联起来。

  • 接口上报

功能:RPC服务gateway-sdk如果重复启动多次扫描注册接口,会因为插入重复索引键的行记录报错。此处提供一个按钮配置,当sdk启动后不会扫描所有接口方法。

@ConditionalOnproperty:类注解,用于设置是否加载当前Bean。

从application.yml文件中,读取配置文件的prefix+name值,并和havingValue的值进行比较,如果一样则Spring容器加载Bean,否则不加载当前Bean。matchIdMissing字段为true表示如果配置文件找不到该prefix+name字段(无法进行比对),那么加载当前Bean,否则不加载,相当于默认配置。

@ConditionalOnProperty(prefix = "api-gateway-sdk",name = "enabled",havingValue = "true",matchIfMissing = true)
1

在api-gateway-sdk的配置文件中,设置enabled为false,RPC服务启动后就不会自动装配配置类(不会扫描所有服务接口),服务接口就不会被重复注册进数据库当中。

  • 调用反馈

网关算力gateway-core在Netty服务端进行handler处理逻辑时,无论泛化调用成功与否,都需要在封装的HTTP响应对象的结果中,加入当前通信的算力节点IP节点信息,便于排查bug。

core-ProtocolDataHandler#node:从配置对象中,取出当前Netty通信的服务端算力节点IP与端口。

core-GatewayResultMessage:添加node字符串作为成员属性,保存算力节点的IP信息。

编辑 (opens new window)
#网关
上次更新: 2023/12/15, 15:49:57
Api-gateway-assist
部署配置

← Api-gateway-assist 部署配置→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式