Scala 如何为akka http引入端点版本控制
我在akka http中有5个控制器。每个端点有5个端点(路由)。现在,我需要为它们引入版本控制。所有端点都应以Scala 如何为akka http引入端点版本控制,scala,refactoring,versioning,endpoint,akka-http,Scala,Refactoring,Versioning,Endpoint,Akka Http,我在akka http中有5个控制器。每个端点有5个端点(路由)。现在,我需要为它们引入版本控制。所有端点都应以/version1作为前缀。 例如,如果有一个端点xyz,现在它应该是/version1/xyz。 其中一种方法是添加路径前缀,但需要将其添加到每个控制器。 是否有方法将其添加到公共位置,以便在所有端点上显示 我正在使用akka http和scala 您可以创建一个基本路由,它接受像/version1/…这样的路径,并引用没有路径前缀的内部路由 val version1Route =
/version1
作为前缀。
例如,如果有一个端点xyz
,现在它应该是/version1/xyz
。
其中一种方法是添加路径前缀
,但需要将其添加到每个控制器。
是否有方法将其添加到公共位置,以便在所有端点上显示
我正在使用akka http和scala 您可以创建一个基本路由,它接受像
/version1/…
这样的路径,并引用没有路径前缀的内部路由
val version1Route = path("xyz") {
...
}
val version2Route = path("xyz") {
...
}
val route = pathPrefix("version1") {
version1Route
} ~ pathPrefix("version2") {
version2Route
}
间接回答 Aleksey Isachenkov的答案是正确的直接解决方案 另一种方法是将版本控制放在
主机名中,而不是路径中。在源代码管理中获得路由
值的“version1”后,您可以将签入标记为“version1”,将其部署到生产环境中,然后使用DNS条目将服务名称设置为version1.myservice.com
然后,一旦需要更新的功能,就更新代码并在源代码管理中将其标记为“version2”。发布此更新版本并使用DNS将名称设置为version2.myservice.com
,同时保持version1实例运行。这将导致两个活动服务独立运行
这种方法的好处是:
随着新版本的发布,代码不会持续增长
您可以使用日志记录来确定某个版本是否在很长时间内未被使用,然后只需杀死该服务的运行实例即可结束该版本的生命周期
通过让production.myservice.com
指向您想要的服务版本,您可以使用DNS来定义当前的“生产”版本。例如:一旦发布了version24.myservice.com
并对其进行了一段时间的测试,您就可以将production.myservice.com
指针从23更新到24。旧版本可以为任何不想升级的用户保持运行,但任何想要最新版本的用户都可以始终使用“production”