【发布时间】:2019-09-23 05:54:29
【问题描述】:
我正在使用 Nifi 创建数据流管道,其中我使用 Infinispan 缓存服务器但是当我使用带有 Groovy 脚本的 executescript 时,它会进入无限循环并打开许多套接字连接。我试图关闭它,但它仍然打开了许多连接,然后它抛出了
java.net.SocketException: No buffer space available (maximum connections reached?): connect
通过以下链接,我更改了注册表 https://support.pitneybowes.com/VFP06_KnowledgeWithSidebarTroubleshoot?id=kA280000000PEE1CAO&popup=false&lang=en_US
然后用netstat -n检查打开的连接我打开了65534,因为上面的设置。
下面是从 Infinispan 缓存中读取的 groovy 脚本
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.apache.commons.io.IOUtils;
import java.nio.charset.StandardCharsets;
def cacheName = "mycache"
def configuration = new ConfigurationBuilder()
.addServer().host("localhost").port(11322).build();
def cacheManager = new RemoteCacheManager(configuration)
RemoteCache cacheA = cacheManager.getCache(cacheName)
flowFile = session.get()
if(!flowFile) return
key = flowFile.getAttribute('key')
id = flowFile.getAttribute('id')
jsonFromCache = cacheA.get(key + "_" + id);
if(cacheA != null) {
cacheA.stop()
}
if(cacheManager != null) {
cacheManager.stop()
}
flowFile = session.write(flowFile, {outputStream ->
outputStream.write(jsonFromCache.getBytes(StandardCharsets.UTF_8))
} as OutputStreamCallback)
session.transfer(flowFile, REL_SUCCESS)
【问题讨论】:
-
你试过finispan吗? (对不起......我无法抗拒。)
-
@user2478398 我的问题有什么问题吗?
-
绝对不是。我只是不成熟(因此很抱歉)。如果我知道这里的任何图书馆足以提供帮助,我会知道的,但恐怕我不知道。
-
在从会话中获取文件之前,您正在打开与缓存的连接。您正在打开连接,在这一行只退出脚本而不关闭它:
if(!flowFile) return -
顺便说一句,可以处理处理器启动和停止以使每个处理器建立一次缓存连接。
标签: java groovy apache-nifi infinispan