我在Main()函数中有这个代码:
DataStream<OutputObject> asyncResultStream = AsyncDataStream.orderedWait(
listOfData,
new CustomAsyncConnector(),
5,
TimeUnit.SECONDS,
10).setParallelism(3).startNewChain().uid("customUid");
在1.2中使用AsyncDataStreams的简单格式。 CustomAsyncConnector中的代码就像您将在其核心找到的每个示例一样:
public class CustomAsyncConnector extends RichAsyncFunction<CustomObject, ResultObject> {
private transient Session client;
@Override
public void open(Configuration parameters) throws Exception {
client = Cluster.builder().addContactPoint("<CustomUrl>")
.withPort(1234)
.build()
.connect("<thisKeyspace>");
}
@Override
public void close() throws Exception {
client.close();
}
@Override
public void asyncInvoke(final CustomObject ctsa, final AsyncCollector<ResultObject> asyncCollector) throws Exception {
//Custom code here...
}
}
现在我的问题是: 1.)在CustomAsyncConnector()中将“参数”传递给open()函数的正确方法是什么,从而在Main()函数中调用它。 2.)如何在open()函数中使用参数来建立与客户端的连接?
我对第一个问题的猜测是在main中创建一个新的CustomAsyncConnector()对象实例,然后直接调用open()函数并将参数对象传递给它,然后将该实例放在AsysDataStream的代码中。但是我不确定这是否是最佳方式,或者更重要的是,在Configuration类型对象中设置字段的正确方法(再次假设执行“configParameters.setString(”contactPointUrl“,”127.0.0.1“)) “是对的,但我不确定。”这导致了我的第二个,也是最重要的问题。
关于我的第二个问题,我想传递给open()函数的参数是contactPointUrl,portNumber和要放入.connect()的键空间。但是我似乎无法通过执行类似“.addContactPoint(parameters.getString(”contactPointUrl“))”的操作来访问它们。我也尝试过看看是否或者我应该在哪里进行Cluster.builder()。getConfiguration(参数)但是我在黑暗中拍摄甚至属于或者如果有的话,如果参数名称必须是特定的等等。< / p>
所以我希望我没有说得太糟糕,但任何和所有的帮助都会非常感激。
提前致谢!
答案 0 :(得分:0)
这是最终起作用的。仍然不确定如何将配置参数传递给.open()方法,但是很好。
将此添加到CustomAsyncConnector类:
private final CustomProps props;
public CustomAsyncConnector(CustomProps props) {
super();
this.props = props;
}
我在main()方法中传递的内容:
AsyncDataStream
.unorderedWait(
dataToProcess,
new CustomAsyncConnector(props),
5,
TimeUnit.SECONDS,
10);
并使用.open()方法中的道具,就像我想要使用参数一样。