概述
1.前文回顾
image.png
上一讲,按照这个框图部署两个服务;在此基础上我们接入一个Http协议的服务:服务路径:soul-examples-http;
2.soul-examples-http启动分析
image.png
红色框中:http client register:发起http请求去注册!
注册的报是:{"appName":"http","context":"/http","path":"/http/test/","pathDesc":"","rpcType":"http","host":"192.168.137.1","port":8188,"ruleName":"/http/test/","enabled":true,"registerMetaData":false}
进入这个类:RegisterUtils
public static void doRegister(final String json, final String url, final RpcTypeEnum rpcTypeEnum) {
try {
String result = OkHttpTools.getInstance().post(url, json);
if (AdminConstants.SUCCESS.equals(result)) {
log.info("{} client register success: {} ", rpcTypeEnum.getName(), json);
} else {
log.error("{} client register error: {} ", rpcTypeEnum.getName(), json);
}
} catch (IOException e) {
log.error("cannot register soul admin param, url: {}, request body: {}", url, json, e);
}
}
说明:往这个url发送json报文!接下的问题是在哪里调用了这个方法并且这个url地址在哪?
debug 如下如:(没有当断点发现不了问题的)
image.png
这里得到的结论:
从堆栈信息可知:上一级调用点是SpringMvcClientBeanPostProcessor的postProcessAfterInitialization
SpringMvcClientBeanPostProcessor这个类实现了BeanPostProcessor
补充说明BeanPostProcessor这个接口
BeanPostProcessor 是一个回调机制的扩展点,它的核心工作点是在 bean 的初始化前后做一些额外的处理;postProcessAfterInitialization 方法会在任何 bean 的初始化回调(例如 InitializingBean 的 afterPropertiesSet 或自定义 init-method )之后;
SpringMvcClientBeanPostProcessor的构造器调用时机?在构造器中打上断点然后通过调用栈可知:SoulSpringMvcClientConfiguration这个配置类中@Bean标注了几个方法;
初始化顺序
@ConfigurationProperties(prefix = "soul.http")
并且new SoulSpringMvcConfig();这个实例对应了配置文件中的配置
soul:
http:
adminUrl: http://localhost:9095
port: 8188
contextPath: /http
appName: http
full: false
重点说明postProcessAfterInitialization完成逻辑(注册API签名)
获取bean上的注解:controller,restController,requestMapping
上述有一个不为空,获取这个bean上是否有SoulSpringMvcClient注解(clazzAnnotation)
clazzAnnotation 不为空,并且路径包含*就发一次请求,返回;
clazzAnnotation 为空;获取所有的方法;再循环获取方法上是否有SoulSpringMvcClient注解
假如有发起http请求;
Soul-admin接收逻辑:
/**
* Register spring mvc string.
*
* @param springMvcRegisterDTO the spring mvc register dto
* @return the string
*/
@PostMapping("/springmvc-register")
public String registerSpringMvc(@RequestBody final SpringMvcRegisterDTO springMvcRegisterDTO) {
return soulClientRegisterService.registerSpringMvc(springMvcRegisterDTO);
}
猜测:将数据存入数据库,并把数据同步给bootstrap?
这时推到出如下的框图:
image.png
总结
image.png
后续:
admin接收到http register之后的处理逻辑;
负载均衡的规则处理
插件加载分析
接入不同协议的服务
最后
以上就是矮小夕阳为你收集整理的soul显示服务器错误,Soul接入一个Http服务的全部内容,希望文章能够帮你解决soul显示服务器错误,Soul接入一个Http服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复