【问题标题】:How to access Flink statefun function如何访问 Flink statefun 函数
【发布时间】:2022-03-11 19:17:16
【问题描述】:

flink Playground 给出了如下演示:

public final class GreeterAppServer {

  public static void main(String[] args) {
    final StatefulFunctions functions = new StatefulFunctions();
    functions.withStatefulFunction(UserFn.SPEC);
    functions.withStatefulFunction(GreetingsFn.SPEC);

    final RequestReplyHandler requestReplyHandler = functions.requestReplyHandler();
    final Undertow httpServer =
        Undertow.builder()
            .addHttpListener(1108, "0.0.0.0")
            .setHandler(new UndertowHttpHandler(requestReplyHandler))
            .build();
    httpServer.start();
  }

如何通过http请求访问函数? 发布?获取?

【问题讨论】:

  • 你可以在 statefun.io 找到完整的文档,在操场上试试 docker-compose up

标签: java apache-flink flink-statefun


【解决方案1】:

当你像这样设置有状态函数时

functions.withStatefulFunction(UserFn.SPEC); 

您实际上将您的函数注册为 http 服务器的处理程序。

接下来您要做的是定义您的函数将使用哪个端点。

  static final TypeName TYPENAME = TypeName.typeNameOf("greeter.fns", "user");
  static final StatefulFunctionSpec SPEC =
      StatefulFunctionSpec.builder(TYPENAME)
          .withValueSpecs(SEEN_COUNT, SEEN_TIMESTAMP_MS)
          .withSupplier(UserFn::new)
          .build();

在上面的示例中,有状态函数注册到端点greeter.fns/user。参考:https://github.com/apache/flink-statefun-playground/blob/main/java/greeter/src/main/java/org/apache/flink/statefun/playground/java/greeter/UserFn.java

这也应该在您的module.yaml 文件中定义如下。参考:https://github.com/apache/flink-statefun-playground/blob/main/java/greeter/module.yaml

functions: greeter.fns/*

最后,您将 module.yaml 配置为 docker-compose.yml 中的环境。参考:https://github.com/apache/flink-statefun-playground/blob/main/java/greeter/docker-compose.yml

volumes:
  - ./module.yaml:/module.yaml

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多