1

我正在向 AWS Lambda 部署一个相当简单的 Spring Cloud 函数,并且遇到了冷启动缓慢的问题,并且在部署后调用该函数时偶尔会出现故障。

首先,这是我的单节课。(最终这个函数将对数据库进行一些域记录查找,所以这里使用的名称“域”相当自由。我还删除了任何实际的数据处理,只是返回字符串。

<< 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 是否有原因?(同样重要的是——我可以把它关掉吗?)

4

1 回答 1

0

面临同样的问题,已经通过https://github.com/spring-cloud/spring-cloud-function/issues/367向 Spring Cloud 团队报告

于 2019-05-19T12:58:02.947 回答