Почему моя функция Spring Cloud пытается открыть локальные HTTP-соединения? - PullRequest
0 голосов
/ 14 мая 2019

Я развернул довольно простую 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 Ответ

0 голосов
/ 19 мая 2019

Столкнувшись с той же проблемой, о которой уже сообщалось весенней облачной команде с https://github.com/spring-cloud/spring-cloud-function/issues/367

...