Spring集成消息只有在达到一定容量后才会序列化,从而导致行为不一致

时间:2018-07-17 09:05:36

标签: spring-integration gemfire

我们在spring集成消息序列化方面遇到问题。我们将GemFire作为消息存储库。当我们收到超过1万条消息时,我们将看到不一致的结果。  我有这样的课程

{public class SplitReportInformationImpl implements Comparable {
       private transient List<Comparable> sortFields;
       public SplitReportInformationImpl(List<Comparable> sortFields) {
          this.sortFields = sortFields;
       }

     @Override
       public int compareTo(SplitReportInformation o2) {
             // here NullPointException
             for (int k =0; k < getSortFields().size(); k++) { 
             int result = getSortFields().get(k)
                                        .compareTo(o2.getSortFields()
                                        .get(k));
             if (result != 0) {
                return result;
             }
          }
          return 0;
       }
     }}

我们在getSortFields()。size()的compareTo方法中得到了NullPointerException。有成千上万个json顺序读取,每个json创建一个消息,并为每个json创建SplitReportInformationImpl对象并将其存储在消息中。

有一个聚合器组合消息,该聚合器调用上面的compareTo方法。那就是它导致NullPointException的地方。代码有点复杂,不容易放在这里,并且对这个错误没有用,因为SplitReportInformationImpl对象是在聚合器之前创建的。

有两组json,一组包含9k json,另一组包含3k json。如果首先输入9k json,那么它们都会产生正确的输出而没有任何错误;如果直接输入3k json,则如上所述会为其中的一些抛出NullPointException。

我的问题是,如果spring消息正在序列化消息,则应该始终进行序列化,并且应该始终通过NullPointException进行处理,因为sortField变量是瞬时的。

如果Spring消息根本没有序列化,那么我们根本不应该获取NullPointException。

0 个答案:

没有答案