Почему моя функция Spring Cloud пытается открыть локальные HTTP-соединения?
Я развернул довольно простую Spring Cloud Function для AWS Lambda и столкнулся с проблемой медленного холодного запуска и случайных сбоев, отмеченных при вызове функции после ее развертывания.
Во-первых, вот мой единственный класс. (В конце концов, эта функция выполнит некоторые поиски записей домена в базе данных, поэтому имя "домен" используется здесь довольно свободно. Я также удалил всю фактическую обработку данных и просто возвращаю строки.
<< imports >>
@SpringBootConfiguration
public class DomainApplication implements ApplicationContextInitializer<GenericApplicationContext> {
private static Log logger = LogFactory.getLog(DomainApplication.class);
public static void main(String[] args) throws Exception {
FunctionalSpringApplication.run(DomainApplication.class, args);
}
public Supplier<String> domains(){
return () -> {
logger.info("Return a List of Domains");
return "All Domains";
};
}
public Function<String, String> domain() {
return value -> {
logger.info("Return A Single Domains");
return "This Domain" + value;
};
}
@Override
public void initialize(GenericApplicationContext context) {
context.registerBean("domain", FunctionRegistration.class,
() -> new FunctionRegistration<Function<String, String>>(domain())
.type(FunctionType.from(String.class).to(String.class).getType()));
context.registerBean("domains", FunctionRegistration.class,
() -> new FunctionRegistration<Supplier<String>>(domains())
.type(FunctionType.from(String.class).to(String.class).getType()));
}
}
Вот зависимости проекта:
...
set('springCloudVersion', '2.1.0.RELEASE')
...
implementation "org.springframework.cloud:spring-cloud-function-context:${springCloudVersion}"
implementation "org.springframework.cloud:spring-cloud-starter-function-webflux:${springCloudVersion}"
implementation "org.springframework.cloud:spring-cloud-function-adapter-aws:${springCloudVersion}"
implementation 'com.amazonaws:aws-lambda-java-core:1.2.0'
implementation 'com.amazonaws:aws-lambda-java-events:2.2.6'
testCompile("org.springframework.boot:spring-boot-starter-test:${springCloudVersion}")
Теперь, когда я упаковываю и внедряю версию приложения shadowJar в AWS Lambda, журналы запуска показывают отказ соединения:
2019-05-14 20:45:21.205 ERROR 1 --- [or-http-epoll-3] reactor.Flux.MonoRepeatPredicate.1 : onError(io.netty.channel.AbstractChannel$AnnotatedConnectException: syscall:getsockopt(..) failed: Connection refused: localhost/127.0.0.1:80)
... есть ли причина, по которой автозагрузка пытается локально подключиться к порту 80? (И, что важно, я могу это отключить?)
1 ответ
Столкнувшись с той же проблемой, уже сообщили весенней облачной команде с https://github.com/spring-cloud/spring-cloud-function/issues/367