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

时间:2018-03-07 15:49:11

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

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

1 个答案:

答案 0 :(得分:4)

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

对于GAE目的的部署,只要索引配置位于特定服务或应用程序的根目录中,只要从该位置部署它就无关紧要。

但是,如果没有该服务器目录中的索引配置,本地开发服务器可能无法运行特定服务 - 我怀疑这是导致您悲伤的原因。为了在DRY精神中解决这个问题,我的首选是在app根目录中有一个配置文件的主副本,并将符号链接指向每个服务目录。

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

如果您的所有模块都是基于Java的,那么您应该没问题。但是如果你有各种语言,你可能不得不尝试共享index.yaml等价物。

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

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