RemoteAPI в Google Appengine Standard с Java8 Runtime
Используя spring-boot в Google Appengine Standard с java8, иногда создаются новые темы - например, для событий?
Можно ли установить удаленный API на эти потоки при запуске на appengine. Отлично работает на сервере разработки, но не на производстве.
public void onApplicationEvent(final M2MFactoryEvent m2m_factory_event) {
try {
//if(installer == null) {
if(true) {
log.error("Need to setup remote api.");
installer = new RemoteApiInstaller();
RemoteApiOptions options = null;
if(applicationEnvironmentIsDevelopment()) { // running locally on development server
options = new RemoteApiOptions()
.server("localhost", 8080)
.useDevelopmentServerCredential();
} else if(!applicationEnvironmentIsDevelopment()) { // running on appengine
if("myapp".equals(googleCloudProject) || "myapp-dev".equals(googleCloudProject)) {
log.error("Need to setup remote api options");
File private_key_file = new ClassPathResource("myapp-dev.p12").getFile();
log.info("Private key file is " + private_key_file + ". Exists? " + private_key_file.exists() + ". CanRead? " + private_key_file.canRead());
String service_account_e_mail = "admin-myapp@" + googleCloudProject + ".iam.gserviceaccount.com";
/*JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(service_account_e_mail)
.setServiceAccountPrivateKeyFromP12File(private_key_file)
//.setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
//.setServiceAccountUser(service_account_e_mail)
.build();*/
options =
new RemoteApiOptions()
.server(googleCloudProject + ".appspot.com", 443)
////.useServiceAccountCredential(service_account_e_mail, new ClassPathResource("myapp-dev.p12").getFile().getAbsolutePath())
//.useServiceAccountCredential(service_account_e_mail, credential.getServiceAccountPrivateKey())
.useApplicationDefaultCredential()
;
log.info("Setup " + installer + " in " + getClass().getSimpleName() + ".");
} else {
log.error("Don't know how t setup the remote api environment on " + getClass().getSimpleName() + ".");
}
}
installer.install(options);
installer.logMethodCalls();
log.debug("Installed remote api on " + getClass().getSimpleName() + ".");
} else {
log.info("" + installer + " already installed for remote api.");
}
ObjectifyService.run(new VoidWork() {
/* (non-Javadoc)
* @see com.googlecode.objectify.VoidWork#vrun()
*/
public void vrun() {
// doing some work with objectify here...
}
}
});
} catch(Exception e) {
log.error("Problem in " + getClass().getSimpleName() + ".", e);
} finally {
if(installer != null)
installer.uninstall();
installer = null;
}
//installer.uninstall();
}
Как вы можете видеть, я пробовал много способов подключения (файл p12, GoogleCredential и т. Д.) К удаленному API, но безуспешно.
Получение:
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_112-google-v7]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_112-google-v7]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_112-google-v7]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_112-google-v7]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_112-google-v7]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_112-google-v7]
at java.net.Socket.connect(Socket.java:538) ~[na:1.8.0_112-google-v7]
at java.net.Socket.<init>(Socket.java:434) ~[na:1.8.0_112-google-v7]
at java.net.Socket.<init>(Socket.java:286) ~[na:1.8.0_112-google-v7]
Но я не могу понять, где?
Все методы, которые я пытался установить, работают нормально на сервере разработки и в автономных приложениях.