spring 整合CachingSessionFactory会话池说明
spring integration CachingSessionFactory session pool clarification
我们正在使用 spring 集成 CachingSessionFactory 来缓存 sftp 会话。一切正常,但有一个问题是如何处理这些会话。
比如说,如果我的池大小是 10,并且如果其中一个会话失效(可能与实际的 sftp 服务器断开连接),那么在这 10 个池中,是否会抛出该失效会话并由另一个好的会话替换在使用之前。
是的,你的结论是正确的。 CachingSessionFactory
基于 org.springframework.integration.util.SimplePool
并且请求的代码如下所示:
private T doGetItem() {
T item = this.available.poll();
if (item != null && logger.isDebugEnabled()) {
logger.debug("Obtained " + item + " from pool.");
}
if (item == null) {
item = this.callback.createForPool();
if (logger.isDebugEnabled()) {
logger.debug("Obtained new " + item + ".");
}
allocated.add(item);
}
else if (this.callback.isStale(item)) {
if (logger.isDebugEnabled()) {
logger.debug("Received a stale item " + item + ", will attempt to get a new one.");
}
doRemoveItem(item);
item = doGetItem();
}
this.inUse.add(item);
return item;
}
请参阅他们的源代码以获取更多信息。
我们正在使用 spring 集成 CachingSessionFactory 来缓存 sftp 会话。一切正常,但有一个问题是如何处理这些会话。
比如说,如果我的池大小是 10,并且如果其中一个会话失效(可能与实际的 sftp 服务器断开连接),那么在这 10 个池中,是否会抛出该失效会话并由另一个好的会话替换在使用之前。
是的,你的结论是正确的。 CachingSessionFactory
基于 org.springframework.integration.util.SimplePool
并且请求的代码如下所示:
private T doGetItem() {
T item = this.available.poll();
if (item != null && logger.isDebugEnabled()) {
logger.debug("Obtained " + item + " from pool.");
}
if (item == null) {
item = this.callback.createForPool();
if (logger.isDebugEnabled()) {
logger.debug("Obtained new " + item + ".");
}
allocated.add(item);
}
else if (this.callback.isStale(item)) {
if (logger.isDebugEnabled()) {
logger.debug("Received a stale item " + item + ", will attempt to get a new one.");
}
doRemoveItem(item);
item = doGetItem();
}
this.inUse.add(item);
return item;
}
请参阅他们的源代码以获取更多信息。