java - 如何从 java 连接到正在运行的 bigtable 模拟器

标签 java bigtable google-cloud-bigtable

我正在尝试使用 gcloud beta 模拟器中的 bigtable 模拟器。 我启动模拟器,获取主机名 (localhost) 和端口(在本例中为 8885)

gcloud beta emulators bigtable start

Executing: /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/bigtable-emulator/cbtemulator --host=localhost --port=8885

我正在尝试从 Java 测试客户端连接到模拟器, 这是我提供的:

Configuration conf = BigtableConfiguration.configure(projectId, instanceId);

if(!Strings.isNullOrEmpty(host)){
    conf.set(BigtableOptionsFactory.BIGTABLE_HOST_KEY, host);
    conf.set(BigtableOptionsFactory.BIGTABLE_PORT_KEY, Integer.toString(port));
}
connection = BigtableConfiguration.connect(configuration);
try (Table table = connection.getTable("tName")){
    table.put(<Put instance>);
} 

当我执行测试代码时,我得到:

16:36:37.369 [bigtable-batch-pool-1] INFO com.google.cloud.bigtable.grpc.async.AbstractRetryingRpcListener - Retrying failed call. Failure #1, got: Status{code=UNAVAILABLE, description=null, cause=java.net.ConnectException: Connection refused: localhost/0:0:0:0:0:0:0:1:8885}
java.net.ConnectException: Connection refused: localhost/0:0:0:0:0:0:0:1:8885

我正在使用库:com.google.cloud.bigtable:bigtable-hbase-1.2:0.9.1

知道我做错了什么吗?

谢谢!

最佳答案

您需要设置一个额外的配置属性:

conf.set(BigtableOptionsFactory.BIGTABLE_USE_PLAINTEXT_NEGOTIATION, true);

此外,从日志消息来看,它似乎正在尝试连接到 IPv6 地址,但我认为这不会起作用。仔细检查 host 是否是有效的 IPv4 地址。

在不久的将来,Java 客户端将使这件事变得更容易。

关于java - 如何从 java 连接到正在运行的 bigtable 模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38577163/

相关文章:

java - 无法从数据流中的 bigtable 读取

java - 使用指向多个位置的 JAVA_HOME 吗?

bigtable - Gmail 与 Bigtable 一起使用的一般架构是什么

使用 Go 进行 Google Cloud Bigtable 身份验证

bigtable - 更长时间地维护 Google Bigtable 中的数据

android - 在谷歌上创建更新服务

python - 根据 Google Cloud Bigtable 中的唯一 ID 选择 JSON 对象

java - 捕获错误的异常

java - 尝试设置 spring servlet 时获取 "WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI ..."

java - 使用 Java SDK sellpartner-api-aa-java 连接 SP-API 时遇到问题