Web services 阿克卡港解绑
各位,我目前正在使用一个API服务,该服务正在使用Akka和HA代理进行负载平衡。安装程序有两个并行运行的服务,HA代理执行负载平衡。akka服务(后端与Lucene一起工作)必须每天将新数据(索引)加载到内存中一次,因为这两个服务在刷新过程中都不可用。我在后端按顺序重新加载(使用Curator进行Zookeeper锁定),但Akka端口仍处于运行状态,因为HA代理仍将传入请求发送到此时正在刷新的服务。如果您对如何向HA代理传递此服务目前不可用的信息有任何意见,我们将不胜感激 -当您收到Web services 阿克卡港解绑,web-services,http,akka,apache-zookeeper,haproxy,Web Services,Http,Akka,Apache Zookeeper,Haproxy,各位,我目前正在使用一个API服务,该服务正在使用Akka和HA代理进行负载平衡。安装程序有两个并行运行的服务,HA代理执行负载平衡。akka服务(后端与Lucene一起工作)必须每天将新数据(索引)加载到内存中一次,因为这两个服务在刷新过程中都不可用。我在后端按顺序重新加载(使用Curator进行Zookeeper锁定),但Akka端口仍处于运行状态,因为HA代理仍将传入请求发送到此时正在刷新的服务。如果您对如何向HA代理传递此服务目前不可用的信息有任何意见,我们将不胜感激 -当您收到服务器绑
服务器绑定时,谢谢您:
val bindServer : () => Future[ServerBinding] = () => Http().bindAndHandle(...)
您可以使用此绑定进行解除绑定,但这并不能解决将来发生解除绑定的时间问题
在模式之后
Akka有一个。它提供了一个未来的,在一段时间后完成。在这里,我们将在60分钟后获得一个未来:
import akka.pattern.after
import akka.Done
import akka.actor.Scheduler
import scala.concurrent.Future.successful
val scheduler : Scheduler = ???
val bindLifespan : FiniteDuration = 60 minutes
val timerToUnbind : () => Future[Done] =
() => after(bindLifespan, scheduler)(successful(Done.getInstance())
您可以使用此计时器触发解除绑定:
val unbindFuture : Future[Done] =
for {
serverBinding <- bindServer()
_ <- timerToUnbind()
unbindDone <- serverBinding.unbind()
} yield {
unbindDone
}
val refreshCache : () => Future[Done] = ???
val rebindFuture : Future[ServerBinding] =
for {
unbindDone <- unbindFuture
cacheRefreshed <- refreshCache()
serverBinding <- bindServer()
} yield serverBinding