Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发送失败的原因_Java_Amazon Kinesis - Fatal编程技术网

Java 发送失败的原因

Java 发送失败的原因,java,amazon-kinesis,Java,Amazon Kinesis,我正在使用KPL的addUserRecord发送书籍。我想: 了解指定作者的所有书籍实际处理的时间(需要更新审计表) 记录每本书及其ISBN的成功与失败 我试了两件事 我创建了一张指向未来对象的ISBN地图。对于成功很好,但是对于失败,我无法访问UserRecordResult对象 Map<String,ListenableFuture<UserRecordResult>> sendResultFuturesMap = new HashMap<>();

我正在使用KPL的addUserRecord发送书籍。我想:

  • 了解指定作者的所有书籍实际处理的时间(需要更新审计表)
  • 记录每本书及其ISBN的成功与失败
  • 我试了两件事

    我创建了一张指向未来对象的ISBN地图。对于成功很好,但是对于失败,我无法访问UserRecordResult对象

        Map<String,ListenableFuture<UserRecordResult>> sendResultFuturesMap = new HashMap<>();    
    ListenableFuture<UserRecordResult> resultFuture = producer.addUserRecord(kinesisStream, partitionKey, data);
    sendResultFuturesMap.put(key, resultFuture);
    ...
    // Verify
    for(Map.Entry<String,ListenableFuture<UserRecordResult>> entry : sendResultFuturesMap.entrySet()) {
      String key = entry.getKey();
      ListenableFuture<UserRecordResult> resultFuture = entry.getValue();
      UserRecordResult result = null;
      try {
        result = resultFuture.get();
      } catch (Exception e) {
        // I always get an ExecutionException that just says "com.amazonaws.services.kinesis.producer.UserRecordFailedException"
        // the if below is never executed, so I never get the UserRecordResult object
        if (e instanceof UserRecordFailedException) {
          result = ((UserRecordFailedException) e).getResult();
        }
      }
      
    }
    
    Map sendResultFuturesMap=newHashMap();
    ListenableFuture resultFuture=producer.addUserRecord(动画片流、分区键、数据);
    sendResultFuturesMap.put(键,resultFuture);
    ...
    //核实
    对于(Map.Entry:sendResultFuturesMap.entrySet()){
    String key=entry.getKey();
    ListenableFuture resultFuture=entry.getValue();
    UserRecordResult=null;
    试一试{
    result=resultFuture.get();
    }捕获(例外e){
    //我总是收到一个ExecutionException,上面写着“com.amazonaws.services.kinesis.producer.UserRecordFailedException”
    //下面的if从未执行过,因此我从未得到UserRecordResult对象
    如果(例如UserRecordFailedException的实例){
    结果=((UserRecordFailedException)e).getResult();
    }
    }
    }
    
    我尝试了回调,成功和失败都能得到UserRecordResult对象,但我不确定如何将它链接到我的ISBN

    ListenableFuture<UserRecordResult> resultFuture = producer.addUserRecord(kinesisStream, partitionKey, data);
    com.google.common.util.concurrent.Futures.addCallback(resultFuture, kinesisSentCallback, resultFutureThreadPool);
    
    private static FutureCallback<UserRecordResult> kinesisSentCallback = new FutureCallback<>() {
      ...
      @Override
      public void onFailure(Throwable t) {
        //Works fine. I'm able to get the UserRecordResult object 
        if (t instanceof UserRecordFailedException) {
          UserRecordFailedException e = (UserRecordFailedException) t;
          UserRecordResult result = e.getResult();
          // How do I get ISBN from the result object?
        }
    }
    
    ListenableFuture resultFuture=producer.addUserRecord(动画片流、分区键、数据);
    com.google.common.util.concurrent.Futures.addCallback(resultFuture、kinessentCallback、resultfutureadpool);
    私有静态FutureCallback KinessEntCallback=新FutureCallback(){
    ...
    @凌驾
    失效时的公共无效(可丢弃的t){
    //工作正常。我可以得到UserRecordResult对象
    if(UserRecordFailedException的t实例){
    UserRecordFailedException e=(UserRecordFailedException)t;
    UserRecordResult=e.getResult();
    //如何从结果对象获取ISBN?
    }
    }
    
    我应该为每条消息创建一个新的回调吗?这似乎效率低下。ppl是如何做到的