如何将用于数据存储的Google Cloud Library连接到App Engine开发服务器?

问题描述 投票:0回答:1

我们正在计划将在Java 8的Google App Engine标准环境上运行的内部应用程序从现在的App Engine APIs迁移到Cloud Firestore in Datastore Mode的推荐客户端库,还可以移植到其他执行环境。] >

除了许多缺少IN / OR查询运算符的问题之外,我们还在努力进行本地测试的设置:根据Using the Java 8 Local Development Server

开发Web服务器使用本地计算机模拟数据存储文件备份的计算机上的数据存储。数据存储名为local_db.bin,它是在您应用程序的WAR目录中创建的,在WEB-INF / appengine-generated /目录中。

但是我们不知道如何将用于数据存储的Google Cloud Client库连接到本地模拟器。

使用]定义默认凭据>

gcloud auth application-default login

或使用类似方法获取服务帐户的凭据后,设置GOOGLE_APPLICATION_CREDENTIALS环境变量>

gcloud iam service-accounts keys create key.json \
    [email protected]

根据其他地方的建议,只是导致客户端库连接到实际的云服务器,而不是根据ADC策略连接到本地仿真器。

我希望开发服务器自动向客户端库提供连接提示,但事实并非如此。

关于建立本地测试环境的任何建议,考虑到我们不能仅迁移到独立Datastore Emulator,因为我们目前需要仅由App Engine开发服务器提供的其他服务(例如,电子邮件提交)?] >


Edit

/进一步修改之后,我们通过使用Local Development Server和独立的Datastore Emulator来解决此问题:
gcloud beta emulators datastore start \
  —project=project-id \
  --host-port=localhost:8081 \
  --data-dir=target/war

DATASTORE_EMULATOR_HOST=localhost:8081 java_dev_appserver.sh \
 --port=8080 \
 target/war

但是,此过程非常繁琐且难以实现自动化:我们正在寻找一种方法,当启动带有[C0之类的应用程序时,该方法可以自动将Google客户端库连接到Java 8 Local Development Server管理的数据存储模拟器],例如App Engine Maven plugin

我们正在计划将在Java 8的Google App Engine标准环境上运行的内部应用程序从现在已取代的App Engine API迁移到建议的Cloud客户端库...] >>

mvn appengine:run已关闭,并确认数据存储区客户端库与本地Web服务器数据存储区模拟器不兼容。

我实际上尝试过,以查看是否可以强制连接到本地Web服务器。下面的代码使用所需的主机配置来设置定制构建器:

GitHub issue

运行本地Web服务器后,我发现确实可以建立连接,但是,数据存储客户端库在尝试存储新实体时返回以下错误:

DatastoreOptions.Builder builder = DatastoreOptions.newBuilder();
builder.setHost("http://localhost:8080");
builder.setProjectId("<PROJECT_ID>");

Datastore ds = builder.build().getService();

Key key = ds.newKeyFactory().setKind("MyEntity").newKey("mykey");
Entity entity = Entity.newBuilder(key).set("p1", "Hello World!").build();

entity = ds.put(entity);
System.out.println(entity);

entity = ds.get(key);
System.out.println(entity);

Web服务器输出以下内容:

[INFO] GCLOUD: com.google.cloud.datastore.DatastoreException: Non-protobuf error: <html><head><title>Error 404</title></head>|<body><h2>Error 404</h2></body>|</html>. HTTP status code was 404.

我相信这增加了对新库与旧模拟器不兼容的确认。

您发现/完全等待迁移到数据存储模式模拟器时,找到的解决方法可能是最好的解决方案。>>

google-app-engine google-cloud-datastore
1个回答
0
投票

mvn appengine:run已关闭,并确认数据存储区客户端库与本地Web服务器数据存储区模拟器不兼容。

我实际上尝试过,以查看是否可以强制连接到本地Web服务器。下面的代码使用所需的主机配置来设置定制构建器:

GitHub issue

运行本地Web服务器后,我发现确实可以建立连接,但是,数据存储客户端库在尝试存储新实体时返回以下错误:

© www.soinside.com 2019 - 2024. All rights reserved.