Amazon web services 如何使AWS Lambda与Neptune在websockets上可靠工作?
所以我构建了这个API。它包含一个Lambda函数(可通过API网关访问),该函数通过WebSocket与Neptune graph数据库实例进行对话 一切都已接通电源并正常工作。但我最近开始注意到API中出现了间歇性的500。经过一些调查,我发现每当多个请求接近时,Neptune Gremlin服务器就会断开/拒绝连接 我发现,这表明无服务器的短暂特性对websocket不起作用,因此每次请求后都应该手动关闭websocket连接。但在实施之后,我发现没有什么不同——仍然是500年 该页面还建议,在Neptune上使用Gremlin时,您可能应该向Neptune发送HTTP请求,而不是使用WebSocketAmazon web services 如何使AWS Lambda与Neptune在websockets上可靠工作?,amazon-web-services,websocket,aws-lambda,gremlin-server,amazon-neptune,Amazon Web Services,Websocket,Aws Lambda,Gremlin Server,Amazon Neptune,所以我构建了这个API。它包含一个Lambda函数(可通过API网关访问),该函数通过WebSocket与Neptune graph数据库实例进行对话 一切都已接通电源并正常工作。但我最近开始注意到API中出现了间歇性的500。经过一些调查,我发现每当多个请求接近时,Neptune Gremlin服务器就会断开/拒绝连接 我发现,这表明无服务器的短暂特性对websocket不起作用,因此每次请求后都应该手动关闭websocket连接。但在实施之后,我发现没有什么不同——仍然是500年 该页面还建
可选地,如果您使用GRMLIN,考虑向GRMLIN HTTP REST端点提交请求,而不是WebSoCube端点,从而避免需要创建和管理连接池的生存期。 这种方法的缺点是,我们将不得不使用基于字符串的查询(这意味着重新编写项目的很大一部分)。另一个缺点是gremlinhttp端点返回非常非结构化的数据
所以我想知道的是,是否有人能让兰博达通过websockets可靠地与海王星对话?如果是,怎么做 编辑: 因为我使用的是AWS Chalice框架,所以我不认为我真的可以直接访问处理函数。下面是我的lambda的样子 下面是connect()
调用的代码:
导入操作系统
从gremlin_python.structure.graph导入图形
从gremlin_python.driver.driver_remote_连接导入DriverRemoteConnection
def connect():
conn\u string=os.environ.get('GRAPH\u DB')
全球g
g=Graph().traversal().withRemote(DriverRemoteConnection(连接字符串'g'))
因此,当应用程序启动时(当一个lambda实例启动时),该connect函数被调用,应用程序将连接到Neptune。从那里,应用程序传递全局
g
变量,以便为该调用使用相同的连接实例。然后在返回请求结果之前,我在DriverRemoteConnection
对象上调用了close()
。是的,可以在Lambda函数中使用WebSocket与Neptune通信。根据您使用的编程语言,执行此操作有不同的细微差别。最后,在Lambda函数的handler()中实例化客户端连接并关闭连接
如果使用Java[1],则可以在处理程序外部创建集群对象,以便每次Lambda调用都可以重用它。但是在每次调用期间,必须实例化并关闭从该集群对象配置的客户机
您是否有正在使用的代码片段可以共享以供审阅
[1] 谢谢您的回复。由于我使用的是Chalice框架,所以我实际上无法直接访问处理程序函数,因此情况可能会变得复杂。不过我会用一些额外的信息来编辑这篇文章。总的来说,你需要确保每次调用Lambda函数时,都会建立一个新的连接,然后关闭。从Chalice的角度来看,这意味着每次对Chalice Lambda中的路由进行API调用时。因此,您不需要在顶层执行connect(),而是希望在每个路由中调用它,并在每个路由/API调用结束时关闭连接。好的,太好了,我将尝试这个!这个解决方案似乎奏效了!非常感谢泰勒!