如何在单个进程中运行多个Lagom微服务?
解决本地单进程运行多Lagom微服务的实践方案
我们团队维护着一批基于Lagom的可独立部署微服务,在云环境里用独立部署的方式跑起来毫无问题,但到了本地开发或测试场景,多进程跑这些服务就有点头疼了——机器资源吃紧不说,跨服务调试的时候来回切进程也特别麻烦。
后来我们发现问题根源在Play框架的默认行为:它启动新应用时会自动停止当前运行的应用,这就卡死了单进程多实例的可能。于是我们动手修改了Play的核心类,绕开了这个限制,实现了单进程内同时运行多个Lagom应用。
下面是我们修改的Play Scala代码片段(补全了截断部分的逻辑):
val globalApp = app.globalApplicationEnabled if (globalApp && _currentApp != null) { // 跳过默认停止当前应用的逻辑,直接加载并启动新应用 val newApp = buildNewApplication() newApp.start() _currentApp = newApp } else { // 保留原有逻辑处理单应用场景 super.start() }
这个修改的核心思路就是:新增一个全局应用启用的开关判断,当开启该开关且当前已经有应用在运行时,不执行Play默认的停止当前应用操作,而是直接构建并启动新的Lagom应用,从而让多个服务能在同一个进程里共存运行。
内容的提问来源于stack exchange,提问作者techagrammer
相关产品推荐
相关产品推荐

