小编use*_*992的帖子

如何在Scala中对Future进行投票?

我想轮询一个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)

asynchronous scala future polling akka

8
推荐指数
1
解决办法
294
查看次数

将多个特定的网络接口与docker swarm一起使用

我正在使用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.xeth0INET地址。这适用于服务的传入用户流量。但是,当我尝试建立与另一服务的连接时,连接被防火墙阻止而超时。

在docker之外,在机器上,我可以运行:

ssh -b y.y.y.y user@server
Run Code Online (Sandbox Code Playgroud)

哪里y.y.y.yeth1INET地址,和它的作品。当我在docker swarm容器中运行相同命令时,出现以下错误:

绑定:yyyy:无法分配请求的地址

有什么办法可以在docker swarm中使用多个网络接口并指定在容器中使用哪个接口?我找不到关于此的大量文档。我需要设置某种代理吗?

linux networking rhel docker docker-swarm

7
推荐指数
1
解决办法
261
查看次数

嵌入式Ruby HTML循环吐出循环次数

部分我有:

<%= 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)

为什么是这样?我怎么能阻止它?

提前致谢.

html ruby ruby-on-rails

-1
推荐指数
1
解决办法
47
查看次数