下面列出了怎么用com.mongodb.connection.Cluster的API类实例代码及写法,或者点击链接到github查看源代码。
static Cluster getCluster(MongoClient mongoClient) {
try {
Method privateMethod = Mongo.class.getDeclaredMethod("getCluster", null);
privateMethod.setAccessible(true);
return (Cluster) privateMethod.invoke(mongoClient);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("deprecation")
@Override
public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
Cluster cluster = (Cluster) allArguments[0];
String remotePeer = MongoRemotePeerHelper.getRemotePeer(cluster);
objInst.setSkyWalkingDynamicField(remotePeer);
}
public static String getRemotePeer(Cluster cluster) {
StringBuilder peersBuilder = new StringBuilder();
for (ServerDescription description : cluster.getDescription().getAll()) {
ServerAddress address = description.getAddress();
peersBuilder.append(address.getHost()).append(":").append(address.getPort()).append(";");
}
return peersBuilder.substring(0, peersBuilder.length() - 1);
}
private List<String> getHostList(Object arg) {
if (!(arg instanceof Cluster)) {
return Collections.emptyList();
}
final Cluster cluster = (Cluster) arg;
final List<String> hostList = new ArrayList<String>();
Collection<ServerDescription> serverDescriptions;// = cluster.getDescription().getAll();//.getServerDescriptions();
try {
ClusterDescription.class.getDeclaredMethod("getServerDescriptions");
serverDescriptions = cluster.getDescription().getServerDescriptions();
} catch (NoSuchMethodException e) {
serverDescriptions = cluster.getDescription().getAll();
}
for (ServerDescription serverDescription : serverDescriptions) {
ServerAddress serverAddress = serverDescription.getAddress();
final String hostAddress = HostAndPort.toHostAndPortString(serverAddress.getHost(), serverAddress.getPort());
hostList.add(hostAddress);
}
return hostList;
}
@Override
public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
Cluster cluster = (Cluster) allArguments[0];
String peers = MongoRemotePeerHelper.getRemotePeer(cluster);
objInst.setSkyWalkingDynamicField(peers);
}