Stream OLP:我怎么能;订阅通知”;目录?

Stream OLP:我怎么能;订阅通知”;目录?,stream,akka,apache-flink,flink-streaming,here-olp,Stream,Akka,Apache Flink,Flink Streaming,Here Olp,我正试图订阅一个目录,以便通知。但找不到符号“thenAppy”。请帮忙 // subscription to notifications CompletionStage<NotificationSubscriptionControl> controlStage = queryApi.subscribeToNotifications(consumerSettings) .thenApply(subscription -> { su

我正试图订阅一个目录,以便通知。但找不到符号“thenAppy”。请帮忙

// subscription to notifications
CompletionStage<NotificationSubscriptionControl> controlStage =
    queryApi.subscribeToNotifications(consumerSettings)
        .thenApply(subscription -> {
            subscription
                .notifications()
                .runWith(Sink.foreach(notification ->
                    // this callback is called each time a new batch publication happens in catalog
                    System.out.printf("catalog %s has a new version %d\n", catalogHrn, notification.getCatalogVersion())
                ), myMaterializer);
            return subscription.subscriptionControl();
        });
//订阅通知
完成阶段控制阶段=
queryApi.SubscribeTonifications(用户设置)
。然后申请(订阅->{
订阅
.通知()
.runWith(Sink.foreach)(通知->
//每次在目录中发生新的批处理发布时,都会调用此回调
System.out.printf(“目录%s有一个新版本%d\n”,catalogHrn,notification.getCatalogVersion())
),MyMaterialer);
返回subscription.subscriptionControl();
});
[错误]编译错误:[INFO]-------------------------------------------------------------[ERROR]Main.java:[41,25]找不到符号:方法 然后应用((下标…;})位置:接口 org.apache.flink.streaming.api.functions.source.SourceFunction [错误]Main.java:[44,65]包akka.stream.javadsl不存在 [错误]Main.java:[47,40]找不到符号:变量 MyMaterialer


根据编译错误,您似乎正在尝试订阅Flink应用程序中的通知。Flink数据客户端queryApi返回的是SourceFunction,而不是CompletionStage。您可以这样使用它:

StreamExecutionEnvironment
    .getExecutionEnvironment()
    .addSource(
        query.subscribeToNotifications(
            new NotificationConsumerSettings(
                "my-notification-consumer-group-1"
            )
        )
    )
    .addSink(
        notification - > System.out.printf(
            "catalog %s has a new version %d\n",
            STREAMING_INPUT_CATALOG_HRN,
            notification
            .getCatalogVersion()
        )
    );

如果subscribeToNotifications是一个阻塞函数,那么您可以将其包装在CompletableFuture的completedFuture方法中

CompletionStage<NotificationSubscriptionControl> controlStage =
        CompletableFuture.completedFuture(queryApi.subscribeToNotifications(consumerSettings))
            .thenApply(
                subscription -> {
                  subscription
                      .notifications()
                      .runWith(
                          Sink.foreach(
                              notification ->
                                  // this callback is called each time a new batch publication
                                  // happens in catalog
                                  System.out.printf(
                                      "catalog %s has a new version %d\n",
                                      catalogHrn, notification.getCatalogVersion())),
                          myMaterializer);
                  return subscription.subscriptionControl();
                });
完成阶段控制阶段=
CompletableFuture.completedFuture(查询API.SubscribeTonifications(用户设置))
.然后申请(
订阅->{
订阅
.通知()
.朗威(
水槽(
通知->
//每次新批发布时都会调用此回调
//发生在目录中
System.out.printf(
“目录%s有一个新版本%d\n”,
catalogHrn,notification.getCatalogVersion()),
MyMaterialer);
返回subscription.subscriptionControl();
});

您能否将pom.xml和从相关.java文件顶部导入的内容作为示例发布?