公司的这个项目使用Akka编写应用软件,调用我的同事使用Matlab编写的算法。同事使用Matlab的编译功能,将算法构建生成成Jar文件。该jar文件放到akka项目的lib目录下。
Akka工程中创建一个Actor Class 起名 Calculator, 使用PinnedDispatcher,这是为了,让一个Actor一直使用线程池中的一个线程。
代码片段如下:
class Calculator extends Actor with ActorLogging {
val w = new UdanRemoteCalculateTotalBalanceTime // class from Matlab compiled jar file
def receive = {
case TotalCalc(fn, ocvFilepath, ratedCapacity, battCount) ⇒
log.info(s"${self.path} TC ${fn} ${ocvFilepath} ${ratedCapacity} ${battCount}")
Try{
w.CalculateTotalBalanceTime(1, fn, ocvFilepath, ratedCapacity)
} match {
case Success(t) ⇒
val v = t(0).asInstanceOf[MWNumericArray].getIntData.map(_.toString).mkString(" ")
sender.!(Calculated(v))
case Failure(e) ⇒ log.error(e.getMessage)
}
}
}
英文版
Calling Matlab compiled in jar file from within Akka for Scala
https://techlzj.blogspot.com/2020/02/calling-matlab-compiled-in-jar-file.html
zhongjian.lu+csdn@gmail.com