OS X 睡眠后 Java 客户端无法访问 Solr 服务器
Solr server unreachable from Java client after OS X sleep
我的 Mac 笔记本电脑上有一个本地开发堆栈,可以与生产站点相匹配。一切都在本地主机上的各个端口上运行:
- Solr 6.5.1
- Postgres
- Spring开机
在我关闭笔记本电脑之前一切正常。然后在打开笔记本电脑后,依赖于 Solr 的 Java 客户端的 Web 应用程序无法再连接到 Solr 服务器:
org.apache.solr.client.solrj.SolrServerException: No live SolrServers available to handle this request
...
Caused by: java.net.UnknownHostException: fe80: nodename nor servname provided, or not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[?:1.8.0_162]
at java.net.InetAddress.lookupAllHostAddr(InetAddress.java:928) ~[?:1.8.0_162]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[?:1.8.0_162]
at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[?:1.8.0_162]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[?:1.8.0_162]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[?:1.8.0_162]
at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.6.jar:4.5.6]
at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:263) ~[httpclient-4.5.6.jar:4.5.6]
但我仍然可以通过 curl 或 Web 界面在本地主机上手动查询 Solr 服务器,即使是完全相同的查询也可以正常工作。无论如何,与 postgres 的连接总是很好。只是 Java 客户端与 solr 的连接失败。
此问题状态持续到:
- 停止和启动Spring启动
- 停止和启动 Solr
- 正在重启IDE
- 通过命令行启动网站
- 通过 IDE
启动网站
- 通过 ifconfig 循环所有网络接口...down/up
- 以上任意组合
恢复该连接的唯一方法是重新启动我的机器。多年来,这个问题一直存在于几台笔记本电脑和 OS X 版本中,但目前我使用的是 10.13.6 high sierra。
我的问题:
- 是否有防止此问题发生的修复程序
- 是否至少有一种无需重启机器即可恢复连接的更快方法
这个博客post解决了我的问题https://thoeni.io/post/macos-sierra-java/
本质上,似乎有 "host" 问题(不能让那个双关语过去!)围绕 Java 在某些情况下很难解析本地主机名,并且他们都通过这个简单的修复解决了:
在您的终端中键入 hostname
命令以确定您的主机名。假设答案是 YOUR-HOSTNAME。
在您的/etc/hosts
中添加或修改这些条目:
127.0.0.1 localhost YOUR-HOSTNAME
::1 localhost YOUR-HOSTNAME
我的 Mac 笔记本电脑上有一个本地开发堆栈,可以与生产站点相匹配。一切都在本地主机上的各个端口上运行:
- Solr 6.5.1
- Postgres
- Spring开机
在我关闭笔记本电脑之前一切正常。然后在打开笔记本电脑后,依赖于 Solr 的 Java 客户端的 Web 应用程序无法再连接到 Solr 服务器:
org.apache.solr.client.solrj.SolrServerException: No live SolrServers available to handle this request
...
Caused by: java.net.UnknownHostException: fe80: nodename nor servname provided, or not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[?:1.8.0_162]
at java.net.InetAddress.lookupAllHostAddr(InetAddress.java:928) ~[?:1.8.0_162]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[?:1.8.0_162]
at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[?:1.8.0_162]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[?:1.8.0_162]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[?:1.8.0_162]
at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.6.jar:4.5.6]
at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:263) ~[httpclient-4.5.6.jar:4.5.6]
但我仍然可以通过 curl 或 Web 界面在本地主机上手动查询 Solr 服务器,即使是完全相同的查询也可以正常工作。无论如何,与 postgres 的连接总是很好。只是 Java 客户端与 solr 的连接失败。
此问题状态持续到:
- 停止和启动Spring启动
- 停止和启动 Solr
- 正在重启IDE
- 通过命令行启动网站
- 通过 IDE 启动网站
- 通过 ifconfig 循环所有网络接口...down/up
- 以上任意组合
恢复该连接的唯一方法是重新启动我的机器。多年来,这个问题一直存在于几台笔记本电脑和 OS X 版本中,但目前我使用的是 10.13.6 high sierra。
我的问题:
- 是否有防止此问题发生的修复程序
- 是否至少有一种无需重启机器即可恢复连接的更快方法
这个博客post解决了我的问题https://thoeni.io/post/macos-sierra-java/
本质上,似乎有 "host" 问题(不能让那个双关语过去!)围绕 Java 在某些情况下很难解析本地主机名,并且他们都通过这个简单的修复解决了:
在您的终端中键入
hostname
命令以确定您的主机名。假设答案是 YOUR-HOSTNAME。在您的
/etc/hosts
中添加或修改这些条目:
127.0.0.1 localhost YOUR-HOSTNAME
::1 localhost YOUR-HOSTNAME