Spring integration Spring集成消息只有在达到一定容量后才会序列化,从而导致行为不一致
我们在spring集成消息序列化方面遇到问题。我们正在使用GemFire作为消息存储。当我们收到超过10k条消息时,我们会看到不一致的结果。 我有一节这样的课Spring integration Spring集成消息只有在达到一定容量后才会序列化,从而导致行为不一致,spring-integration,gemfire,Spring Integration,Gemfire,我们在spring集成消息序列化方面遇到问题。我们正在使用GemFire作为消息存储。当我们收到超过10k条消息时,我们会看到不一致的结果。 我有一节这样的课 {public class SplitReportInformationImpl implements Comparable { private transient List<Comparable> sortFields; public SplitReportInformationImpl(List
{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;
}
}}
{公共类SplitReportInformationImpl实现了可比较的{
私人临时名单;
public SplitReportInformationImpl(列出排序字段){
this.sortFields=sortFields;
}
@凌驾
公共int比较(SplitReportInformation o2){
//这里是NullPointException
对于(int k=0;k
我们在getSortFields().size()的compareTo方法中获得NullPointerException。顺序读取数千个json,每个json创建一条消息,为每个json创建SplitReportInformationImpl对象并存储在消息中
有一个聚合器,它将消息组合在一起,并调用上面的compareTo方法。这就是导致NullPointException的原因。代码有点复杂,不容易放在这里,对于这个bug也没有用处,因为SplitReportInformationImpl对象是在聚合器之前创建的
有两组JSON,一组包含9k JSON,另一组包含3k JSON。如果先输入9k JSON,那么它们都会生成正确的输出,并且没有任何错误;如果在之后直接输入3k JSON,则会对其中一些JSON抛出NullPointException,如上所述
我的问题是,如果spring消息正在序列化消息,它应该始终序列化,并且应该始终通过NullPointException,因为sortField变量是瞬态的
如果Spring消息根本没有序列化,那么我们就不应该得到NullPointException。以前从未见过这种情况。这确实是
瞬态和Java序列化的一个问题,但既然您说它不那么一致,那么它就以某种方式与Gemfire一起出现了。当数据存储到本地缓存时,可能没有任何序列化,但当数据进入复制时,会清除一个瞬态
属性。我们绝对需要一个最小的代码来播放和复制。尽管您仍然需要考虑在没有瞬态的情况下更改逻辑,但您能否只加载3k json并让我们知道发生了什么?