soul显示服务器错误,Soul接入一个Http服务

1.前文回顾

b55cb81f48aa

image.png

上一讲,按照这个框图部署两个服务;在此基础上我们接入一个Http协议的服务:服务路径:soul-examples-http;

2.soul-examples-http启动分析

b55cb81f48aa

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 如下如:(没有当断点发现不了问题的)

b55cb81f48aa

image.png

这里得到的结论:

从堆栈信息可知:上一级调用点是SpringMvcClientBeanPostProcessor的postProcessAfterInitialization

SpringMvcClientBeanPostProcessor这个类实现了BeanPostProcessor

补充说明BeanPostProcessor这个接口

BeanPostProcessor 是一个回调机制的扩展点,它的核心工作点是在 bean 的初始化前后做一些额外的处理;postProcessAfterInitialization 方法会在任何 bean 的初始化回调(例如 InitializingBean 的 afterPropertiesSet 或自定义 init-method )之后;

SpringMvcClientBeanPostProcessor的构造器调用时机?在构造器中打上断点然后通过调用栈可知:SoulSpringMvcClientConfiguration这个配置类中@Bean标注了几个方法;

b55cb81f48aa

初始化顺序

@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?

这时推到出如下的框图:

b55cb81f48aa

image.png

总结

b55cb81f48aa

image.png

后续:

admin接收到http register之后的处理逻辑;

负载均衡的规则处理

插件加载分析

接入不同协议的服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值