使用mongo-java-driver 3.6.1
final String host = "192.168.0.12";
final int port = 40000;
final String collectionName = "foo";
MongoClient mongoClient = new MongoClient(host, port);
MongoCollection coll = mongoClient.getDatabase("test").getCollection(collectionName);
Object first = coll.find().first();
System.out.println(first);
如果我将Shadowsocks从自动代理模式更改为Global Mode
,则上述代码不起作用
com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message
at com.mongodb.connection.InternalStreamConnection.translateReadException(InternalStreamConnection.java:530)
at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:421)
at com.mongodb.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:290)
at com.mongodb.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:255)
at com.mongodb.connection.CommandHelper.sendAndReceive(CommandHelper.java:84)
at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:34)
at com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:91)
at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:51)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:127)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at com.mongodb.connection.SocketStream.read(SocketStream.java:84)
at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:547)
at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:418)
... 9 more
但是在全局模式下,我可以在终端中成功登录mongo shell
➜ ~ mongo 192.168.0.12:40000
> db.foo.findOne()
{ "_id" : ObjectId("5a9e01a52cba6d9bfc22c765"), "x" : 1 }
那为什么在全局模式下mongo-java-driver不起作用