java - 我是否需要在使用它的每个微服务(模块)中或仅在根应用程序中定义数据存储索引?

标签 java google-app-engine datastore database-indexes

我在开发一个包含多个微服务(模块)的应用程序。我在根应用程序中定义了数据存储索引(它只包含那些 cfg 文件,如 datastore-indexes.xml 和 queue.xml 等)。我在控制台中看到这些索引“正在服务”。 [编辑]所以我的错是我之前破坏了查询所以问题变化不大。在多模块应用引擎应用程序中提到的 cfg 文件的最佳策略是什么?

最佳答案

数据存储索引配置是多个应用级配置之一,由应用中的所有服务/模块共享,并且可以独立于服务本身进行部署。事实上,建议首先部署索引配置,让 GAE 获取处于 Serving 状态的那些(这可能需要一段时间,具体取决于需要索引的实体数量)并且仅在部署之后需要这些索引的应用程序代码。

为了以 GAE 为目的进行部署,索引配置是位于特定服务中还是位于应用程序的根目录中并不重要,只要它是从该位置部署的即可。

然而,本地开发服务器可能无法在该服务器目录中没有索引配置的情况下运行特定服务 - 我怀疑这就是导致您悲伤的原因。为了以 DRY 精神解决这个问题,我的首选是在应用程序根目录中拥有配置文件的主副本,并将指向它的符号链接(symbolic link)指向每个服务目录。

事情变得有点复杂,因为 Java GAE 使用 datastore-indexes.xml 配置文件,而其他语言使用 index.yaml 文件,格式不同. Java 还支持 index.yaml 文件,但我不确定开发服务器、IDE 和/或其他本地开发工具是否同样支持它。

如果您的所有模块都是基于 Java 的,您应该没问题。但是,如果您混合使用多种语言,则可能必须尝试共享一个 index.yaml 等效项。

如果这不起作用并且您被迫使用这两个文件,每个文件都符号链接(symbolic link)到各自的语言服务目录中,您必须确保这两个文件中的索引配置一致,否则您可能会破坏一些的服务。

可能感兴趣:Can a default service/module in a Google App Engine app be a sibling of a non-default one in terms of folder structure?

关于java - 我是否需要在使用它的每个微服务(模块)中或仅在根应用程序中定义数据存储索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49156016/

相关文章:

java - 使用 POST 将数据从 Android 发送到 AppEngine Datastore

java - Arrays.asList 有效

java - Maven 编译错误

python - 如何使用服务帐户确定 Google BigQuery 作业的状态?

python - 将 yield 与多个 ndb.get_multi_async 一起使用

java - 在适用于 Eclipse 的 Google Cloud 工具上运行 Objectify 时出现 "projectId must match the following pattern"异常

go - Boltdb-key-Value 数据存储纯粹在 Go 中

java - Spring WebContent 资源 - ServletContext 外部访问

java - 将字节数组或 stringbuilder 转换为 utf-8

google-app-engine - Appengine 数据存储区超时错误 5 和 11 之间有什么区别?