背景
在 2018-03-12 升级了 Solo 版本之后,新发表的文章就无法同步到社区上去了。
闲来无事,来翻翻源代码,看看是哪里的问题。
打开日志
粗略浏览代码,可以看到使用的日志框架是 log4j
,配置文件为 log4j.properties
。
先降低下日志级别,多输出点日志,初步了解下运行的过程。
修改 log4j.properties
,将 log4j.logger.org.b3log.solo=INFO
改为 DEBUG
。
从日志中可以跟踪到,文章同步相关的类为:org.b3log.solo.event.rhythm.ArticleSender
和 org.b3log.solo.event.rhythm.ArticleUpdater
因此再修改 log4j.properties
,增加一行
log4j.logger.org.b3log.solo.event.rhythm=TRACE
只输出此类下的日志,级别为 TRACE。
rhythm 日志
改了配置文件,重启了一下服务,可以看到成功的打印了日志。部分日志如下:
[DEBUG]-[2018-05-28 13:00:16]-[org.b3log.solo.event.rhythm.ArticleUpdater:90]: Ignores post article[title=Solo的文章无法同步到社区的解决] to Rhythm
[DEBUG]-[2018-05-28 13:01:16]-[org.b3log.solo.event.rhythm.ArticleUpdater:90]: Ignores post article[title=Solo的文章无法同步到社区的解决] to Rhythm
[DEBUG]-[2018-05-28 13:02:16]-[org.b3log.solo.event.rhythm.ArticleUpdater:90]: Ignores post article[title=Solo的文章无法同步到社区的解决] to Rhythm
通过日志可以看到,Solo 会定时提交文章到 Rhythm。
保存文章后,可以看到日志,表明发送成功:
[DEBUG]-[2018-05-28 13:06:00]-[org.b3log.solo.event.rhythm.ArticleUpdater:148]: Sent an article to Rhythm
但是事实上虽然有 Sent an article to Rhythm
日志,但是在社区中是看不到此文章的。为什么呢?
查看代码 ArticleSender
和 ArticleUpdater
类,可见实际上是异步提交的
try{
……
urlFetchService.fetchAsync(httpRequest);
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Sends an article to Rhythm error: {0}", e.getMessage());
}
LOGGER.log(Level.DEBUG, "Sent an article to Rhythm");
这里的 fetchAsync
方法会返回一个 Future
对象,里面包含有 HTTPResponse
对象。
可惜返回的结果被丢弃了,无法看到真实的返回状态。
怎么办呢?
准备重写一下相关的类,把 response 给打印出来。
结果发现这个类是 final 的,而且在三方类包,修改起来非常的复杂。
那好吧,就直接抓包吧。
抓包
准备好抓包工具 tcpflow,具体见之前的博文 tcpflow 备忘
开始抓包:
[abeffect@note flow]# tcpflow -i eth0 port 80
tcpflow[7533]: listening on eth0
结果发现,向 rhythm 的请求被 301 重定向了,然后框架没有 follow 到这个重定向。
HTTP/1.1 301 Moved Permanently
Server: nginx/1.13.12
Date: Mon, 28 May 2018 05:56:51 GMT
Content-Type: text/html
Content-Length: 186
Connection: keep-alive
Location: https://rhythm.b3log.org/article
更改配置文件
rhythm 的配置中保存在配置文件 solo.properties
中的,将其改为 443 的地址
rhythm.servePath=https://rhythm.b3log.org:443
测试后,发现 https 的数据包抓下来之后,不能直接解包了。。。好吧。
发文测试
再之后,发了一篇水博科大龙明康访谈学习,发现可以同步到社区上了。
OK,非常的开心,终于可以继续和社区的小伙伴互动了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于