Soul网关-day05

Soul网关-day05

Soul-plugin-sofa测试

​ 开始经过了一些曲折,首先不小心拉了最新的soul-master分支,启动了以后一切看起来十分正常;但是在soul-admin控制台上更换插件的时候,报了一个server端的错误,大概是说PluginTransfer这个类无法初化。关键的调用链路是PluginServiceImpl#listAll()方法;暂时只是发现这个问题,但并没有对其进行调试查看问题所在,似乎应该是哪里有变动;但,感觉可能会比较复杂,我决定还是先完成一些可以比较快能看到成果的东西。

​ 所以为了尽快的完成今天的flag,我重新下了soul-2.2.1版本作为我的soul-admin以及soul-bootstrap的启动服务端,这个版本的soul-admin就没有那个问题了。

​ 启动了双服务端后,满心欢喜的启动了soul-examples-sofa(当然,由于example中用到了zk,所以要先把zk服务起起来)。

​ 但是,很明显事物的发展并没有那么的一帆风顺。启动过程中发现了万绿丛中一点红,如下图所示:
在这里插入图片描述
可以看到,这个红色的error非常扎眼;并不像起soul-example-http那么顺滑,也没有在soul-admin控制台上注册类似下图的这种东西:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NwgnUceV-1611071128549)(C:\Users\Master_PeiXU\AppData\Roaming\Typora\typora-user-images\image-20210119225159209.png)]

​ 那么问题出在哪呢?可以看到error后面有一个类路径:client.common.utils.RegisterUtils,那我们就找过去,可以看到方法里面非常简洁:

/**
 * RegisterUtils.
 *
 * @author severez
 */
@Slf4j
public final class RegisterUtils {

    private RegisterUtils() {
    }

    /**
     * call register api.
     *
     * @param json        request body
     * @param url         url
     * @param rpcTypeEnum rcp type
     */
    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);
        }
    }

}

只有一个doRegister方法,并且我们根据出错的内容可以判断出,大概是**AdminConstants.SUCCESS.equals(result)**这个判断语句为false;

找到这个点以后就可以开心的debug了,我比较感兴趣的是在soul-examples-sofa启动的时候究竟是做了些什么事,而从第21行看变量名可以大致推断出:它这里其实是发了一个http请求的;那么这个请求是发往哪?又发了些什么数据呢?

​ 所以我把断电打在第21行这个点上:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2gcnIW3a-1611071128554)(C:\Users\Master_PeiXU\AppData\Roaming\Typora\typora-user-images\image-20210119230453493.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0Q6IE2R-1611071128558)(C:\Users\Master_PeiXU\AppData\Roaming\Typora\typora-user-images\image-20210119230526179.png)]
json太长了,所以我把value拷贝出来进行了pretty处理:

{
   "appName":"sofa",
   "contextPath":"/sofa",
   "path":"/sofa/insert",
   "pathDesc":"Insert a row of data",
   "rpcType":"sofa",
   "serviceName":"org.dromara.soul.examples.dubbo.api.service.DubboTestService",
   "methodName":"insert",
   "ruleName":"/sofa/insert",
   "parameterTypes":"org.dromara.soul.examples.dubbo.api.entity.DubboTest",
   "rpcExt":"{\"loadbalance\":\"hash\",\"retries\":3,\"timeout\":-1}",
   "enabled":true
}

img

经过一波理智分析,发现它是向 http://localhost:9095/soul-client/sofa-register 发送了几条json数据,反正出了几个error就发了几条数据,那么发送这些数据的依据是什么呢?

​ 本着就近原则我们找到了:SofaTestServiceImpl

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-57A5KGky-1611071128565)(C:\Users\Master_PeiXU\AppData\Roaming\Typora\typora-user-images\image-20210119231433171.png)]

怎么样,上面红框框起来的数据是不是很熟悉,我们把ERROR的东西放大点来康康:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IRtqzSjs-1611071128566)(C:\Users\Master_PeiXU\AppData\Roaming\Typora\typora-user-images\image-20210119231609254.png)]

这里我们可以看到,path的部分就是源码中**@SoulSofaClient中配置的path**,而前缀,应该就是我们在application.yml中配置的属性:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CX5deNog-1611071128569)(C:\Users\Master_PeiXU\AppData\Roaming\Typora\typora-user-images\image-20210119231851170.png)]

而我们看到的 http://localhost:9095/soul-client/sofa-register 中的前半段应该也就是soul.sofa.adminUrl了。

​ 大致分析完毕,但我现在还没有解决这个问题。既然知道了server端的端口,那么就可以很明确的定位到位置了,就是在soul-admin中,我点进2.2.1的soul-admin看了一眼,发现并没有相应的PostMapping:

@RestController
@RequestMapping("/soul-client")
public class SoulClientController {
    
    private final SoulClientRegisterService soulClientRegisterService;
    
    /**
     * Instantiates a new Soul client controller.
     *
     * @param soulClientRegisterService the soul client register service
     */
    public SoulClientController(final SoulClientRegisterService soulClientRegisterService) {
        this.soulClientRegisterService = soulClientRegisterService;
    }
    
    /**
     * 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);
    }
    
    /**
     * Register spring cloud string.
     *
     * @param springCloudRegisterDTO the spring cloud register dto
     * @return the string
     */
    @PostMapping("/springcloud-register")
    public String registerSpringCloud(@RequestBody final SpringCloudRegisterDTO springCloudRegisterDTO) {
        return soulClientRegisterService.registerSpringCloud(springCloudRegisterDTO);
    }
    
    
    /**
     * Register rpc string.
     *
     * @param metaDataDTO the meta data dto
     * @return the string
     */
    @PostMapping("/dubbo-register")
    public String registerRpc(@RequestBody final MetaDataDTO metaDataDTO) {
        return soulClientRegisterService.registerDubbo(metaDataDTO);
    }
}

可以看到2.2.1版本只支持

  1. springmvc
  2. springcloud
  3. dubbo

这三种服务注册方式。

…待完善

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值