Google PubSub 模拟器是否可以与 Google Cloud Pub/Sub API 客户端库一起使用?
Does the Google PubSub Emulator work with the Google Cloud Pub/Sub API Client Library?
我们的 Java 应用在 Google App Engine 上运行。它使用 Google 的 PubSub 来发布和使用消息。
Google PubSub 有两个 Java 客户端。建议使用 gRPC 客户端,但如本页底部所述,Google App Engine 不支持 https://cloud.google.com/pubsub/grpc-overview。
另一个库是 Google 云 Pub/Sub API 客户端 - https://developers.google.com/api-client-library/java/apis/pubsub/v1
使用 gRPC 客户端库时,可以轻松使用 pubsub 模拟器。只需设置环境 属性 即可完成。
PubSub API 客户端是否可以与 Google PubSub 模拟器一起使用?
当 运行 我们的应用程序在本地时,我们的目标是能够使用 PubSub 模拟器而不是连接到云中的实时实例。
我能够将 Java API 库连接到模拟器。
启动模拟器后:
gcloud beta 模拟器 pubsub 开始
我导出了它的地址:
导出 PUBSUB_EMULATOR_HOST=localhost:EMULATOR_PORT
这有效,但需要针对模拟器正在使用的端口正确配置 PubSub 客户端。
这是我用来创建 PubSub 客户端的代码。它基于 PubSub Sample 。注意 setRootUrl 部分。
private Pubsub getClient(final HttpTransport httpTransport, final JsonFactory jsonFactory) {
Preconditions.checkNotNull(httpTransport);
Preconditions.checkNotNull(jsonFactory);
GoogleCredential credential = null;
try {
credential = GoogleCredential.getApplicationDefault();
} catch (IOException e) {
e.printStackTrace();
}
if (credential.createScopedRequired()) {
credential = credential.createScoped(PubsubScopes.all());
}
// Please use custom HttpRequestInitializer for automatic
// retry upon failures.
HttpRequestInitializer initializer = new RetryHttpInitializerWrapper(credential);
Pubsub.Builder pubsubBuilder = new Pubsub.Builder(httpTransport, jsonFactory, initializer);
pubsubBuilder.setApplicationName("<your project id>");
//Check if this is localhost
if (SystemProperty.environment.value() != SystemProperty.Environment.Value.Production) {
pubsubBuilder.setRootUrl("http://localhost:8321/");
}
return pubsubBuilder.build();
}
然后使用以下命令启动模拟器:
gcloud beta 模拟器 pubsub 启动 --host-port=localhost:8321
实际端口号并不重要。然后每次重启模拟器当然需要通过代码配置主题和订阅。
我们的 Java 应用在 Google App Engine 上运行。它使用 Google 的 PubSub 来发布和使用消息。
Google PubSub 有两个 Java 客户端。建议使用 gRPC 客户端,但如本页底部所述,Google App Engine 不支持 https://cloud.google.com/pubsub/grpc-overview。
另一个库是 Google 云 Pub/Sub API 客户端 - https://developers.google.com/api-client-library/java/apis/pubsub/v1
使用 gRPC 客户端库时,可以轻松使用 pubsub 模拟器。只需设置环境 属性 即可完成。
PubSub API 客户端是否可以与 Google PubSub 模拟器一起使用?
当 运行 我们的应用程序在本地时,我们的目标是能够使用 PubSub 模拟器而不是连接到云中的实时实例。
我能够将 Java API 库连接到模拟器。 启动模拟器后: gcloud beta 模拟器 pubsub 开始
我导出了它的地址: 导出 PUBSUB_EMULATOR_HOST=localhost:EMULATOR_PORT
这有效,但需要针对模拟器正在使用的端口正确配置 PubSub 客户端。
这是我用来创建 PubSub 客户端的代码。它基于 PubSub Sample 。注意 setRootUrl 部分。
private Pubsub getClient(final HttpTransport httpTransport, final JsonFactory jsonFactory) {
Preconditions.checkNotNull(httpTransport);
Preconditions.checkNotNull(jsonFactory);
GoogleCredential credential = null;
try {
credential = GoogleCredential.getApplicationDefault();
} catch (IOException e) {
e.printStackTrace();
}
if (credential.createScopedRequired()) {
credential = credential.createScoped(PubsubScopes.all());
}
// Please use custom HttpRequestInitializer for automatic
// retry upon failures.
HttpRequestInitializer initializer = new RetryHttpInitializerWrapper(credential);
Pubsub.Builder pubsubBuilder = new Pubsub.Builder(httpTransport, jsonFactory, initializer);
pubsubBuilder.setApplicationName("<your project id>");
//Check if this is localhost
if (SystemProperty.environment.value() != SystemProperty.Environment.Value.Production) {
pubsubBuilder.setRootUrl("http://localhost:8321/");
}
return pubsubBuilder.build();
}
然后使用以下命令启动模拟器:
gcloud beta 模拟器 pubsub 启动 --host-port=localhost:8321
实际端口号并不重要。然后每次重启模拟器当然需要通过代码配置主题和订阅。