Feign远程调用,调用方法有返回值,没有返回原方法,Canal监听数据库发生的异常:end of stream when reading header,异常中还有“你的主机中的软件中止了一个已建立的连接”等信息

今天用canal来监听mysql binlog,使用feign远程调用,

Feign远程调用,调用方法有返回值,没有返回原方法,Canal监听数据库发生的异常:end of stream when reading header,异常中还有“你的主机中的软件中止了一个已建立的连接”等信息

请求过去,并且能查询到数据返回。

Feign远程调用,调用方法有返回值,没有返回原方法,Canal监听数据库发生的异常:end of stream when reading header,异常中还有“你的主机中的软件中止了一个已建立的连接”等信息

但是在调用方法处抛出异常,也就是不能走到下面的 if判断:

Feign远程调用,调用方法有返回值,没有返回原方法,Canal监听数据库发生的异常:end of stream when reading header,异常中还有“你的主机中的软件中止了一个已建立的连接”等信息

异常信息中提取大致:

end of stream when reading header

你的主机中的软件中止了一个已建立的连接...

后者的连接解决是因为监听类里面,我写了两个自定义的监听的方法@ListenPoint,导致终止连接,把方法改成一个自定义的监听就可以了。

然后前面这个feign调用,我改成一个监听方法之后,试了几次,能成功回调,也会失败,具体显示是打印了这个错误:

2019-11-03 19:57:40.730 ERROR 4360 --- [pool-1-thread-1] .s.c.c.t.AbstractBasicMessageTransponder : pool-1-thread-1: Error occurred when invoke the listener's interface! class:com.cmmplb.canal.listener.CanalDataEventListener, method:onEventContent

搜了网上有很多方法,也试了,都有这个错,不过把feign和对应的controller中的参数,加上一个name对应,这个错误发生的次数变少了:

feign:

/**
     * 根据cid查询对应的内容集合
     * @param cid
     * @return
     */
    @GetMapping("/list/category/{cid}")
    Result<List<Content>> findContentByCategoryId(@PathVariable(name = "cid") Long cid);

controller:

/**
     * 根据cid查询对应的内容集合
     * @param cid
     * @return
     */
    @GetMapping("/list/category/{cid}")
    public Result<List<Content>> findContentByCategoryId(@PathVariable(name = "cid") Long cid) {
        List<Content> contentList = contentService.findContentByCategoryId(cid);
        return new Result<List<Content>>(true, StatusCode.OK, "查询成功", contentList);
    }

也不知道是啥毛病,暂时是这样做能正常的监听数据库,然后调用另一个服务获取数据,具体看以后接触到再深入学习一下。