我想轮询一个API端点,直到达到某种条件。我希望它能在几秒钟到一分钟内达到此条件。我有一个方法来调用返回一个的端点Future
。我是否可以Future
通过某种方法将s链接在一起以每n
毫秒轮询一次此端点并在t
尝试后放弃?
假设我有一个带有以下签名的函数:
def isComplete(): Future[Boolean] = ???
Run Code Online (Sandbox Code Playgroud)
我认为最简单的方法是使所有内容都阻塞:
def untilComplete(): Unit = {
for { _ <- 0 to 10 } {
val status = Await.result(isComplete(), 1.seconds)
if (status) return Unit
Thread.sleep(100)
}
throw new Error("Max attempts")
}
Run Code Online (Sandbox Code Playgroud)
但这可能会占用所有线程,并且不是异步的。我还考虑了递归执行:
def untilComplete(
f: Future[Boolean] = Future.successful(false),
attempts: Int = 10
): Future[Unit] = f flatMap { status =>
if (status) Future.successful(Unit)
else if (attempts == 0) throw new Error("Max attempts")
else {
Thread.sleep(100) …
Run Code Online (Sandbox Code Playgroud) 我正在使用docker swarm部署内部部署第三方应用程序。我要部署的计算机正在运行RHEL 7.6,并且具有两个网络接口。用户将通过与该应用程序进行交互eth0
,但是必须使用与其系统的内部通信,eth1
否则该连接将被其防火墙阻止。我的应用程序需要我的某些服务才能在其网络中建立连接内部服务。
我使用以下方法创建了群集:
$ docker swarm init --advertise-addr x.x.x.x
Run Code Online (Sandbox Code Playgroud)
哪里x.x.x.x
是eth0
INET地址。这适用于服务的传入用户流量。但是,当我尝试建立与另一服务的连接时,连接被防火墙阻止而超时。
在docker之外,在机器上,我可以运行:
ssh -b y.y.y.y user@server
Run Code Online (Sandbox Code Playgroud)
哪里y.y.y.y
是eth1
INET地址,和它的作品。当我在docker swarm容器中运行相同命令时,出现以下错误:
绑定:yyyy:无法分配请求的地址
有什么办法可以在docker swarm中使用多个网络接口并指定在容器中使用哪个接口?我找不到关于此的大量文档。我需要设置某种代理吗?
部分我有:
<%= shift.ones.times do %>
<p>one</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
最终的HTML(来自页面源)是:
<p>one</p>
1
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我怎么能阻止它?
提前致谢.
akka ×1
asynchronous ×1
docker ×1
docker-swarm ×1
future ×1
html ×1
linux ×1
networking ×1
polling ×1
rhel ×1
ruby ×1
scala ×1