我写了一张 app子,只是这样做,尽管它是在压力测试的APICI正在开发之中。 利用行为者同时提出请求非常容易。 总体想法是,你想建立一个行为者,在发出信息时,履行单一要求。 然后,你会给行为者制造多个事例,并用负荷平衡器向他们分发申请。
这里非常简单的执行,是为了给你一个想法(使用http://akka.io” rel=“nofollow”>Akka行为体):
case class MakeRequest(url: String)
class RequestActor extends Actor {
//force the actor to run in it s own thread
self.dispatcher = akka.dispatch.Dispatchers.newThreadBasedDispatcher(self)
def receive = {
case MakeRequest(url) => //perform the request
}
}
val totalRequests = 1000
val url = "http://..."
val totalConections = 4
//create one actor per connection and wrap them in a load balancer
val actors = (0 to totalConnections).map{i => actorOf[RequestActor].start}
val requestBalancer = loadBalancerActor(new CyclicIterator(actors))
//start sending requests
for (i <- 0 to totalRequests) {
requestBalancer ! MakeRequest(url)
}
//send a poison pill to stop the actors after they ve finished all the requests
requestBalancer ! Broadcast(PoisonPill)
//wait for the actors to finish
while (actors.foldLeft(false){ (b, a) => b || !a.isShutdown}) {
Thread.sleep(300)
}
//stop the load balancer
requestBalancer ! PoisonPill
如你所知,我向负荷平衡者发送了<代码>MakeRequest的电文,这些电文遍布各行为体。 每个行为者都有一个信息点,因此一个单一的行为者将及时提出一项请求,但各行为体将同时提出请求。
这一例子没有为采取对策提供一种途径,而你冒着过度流入行为者的风险,但很容易确定。 我利用这一总的想法来进行广泛的压力检测,并以极大的成功作为基准。