使用 Unix Socket 的 Quarkus 数据源被忽略

Quarkus Datasource using Unix Socket is ignored

我正在尝试使用 (Google Cloud SQLproxy) 连接 quarkus 反应式数据源。 您可以 运行 cloud_sql_proxy 作为可用的 unix 套接字 connection.In 这样:

./cloud_sql_proxy -dir=/tmp/cloudsql -instances=proyectA:europe-west1:cloudsql-sandbox-ephemeral -credential_file=../security/proyectA-credentials.json &
2020/06/30 12:39:27 Listening on /tmp/cloudsql/proyectA:europe-west1:cloudsql-sandbox-ephemeral/.s.PGSQL.5432 for proyectA:europe-west1:cloudsql-sandbox-ephemeral
2020/06/30 12:39:27 Ready for new connections

然后尝试连接这个 application.properties:

quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=postgres
quarkus.datasource.password=123456
quarkus.datasource.reactive.url=postgresql:///postgres?cloudSqlInstance=/tmp/cloudsql/proyectA:europe-west1:cloudsql-sandbox-ephemeral/.s.PGSQL.5432
quarkus.datasource.jdbc=false
quarkus.datasource.reactive=true

运行打开Quarkus APP,报错: 离子:Conexión 拒绝:localhost/127.0.0.1:5432 原因:java.net.ConnectException:连接被拒绝

但是,该消息似乎尝试使用 TCP 而不是 Unix 套接字进行连接。是否可以通过 unix 套接字连接 quarkus 数据源?

Java代码就是这么简单

@Inject
private io.vertx.mutiny.pgclient.PgPool client;

(我可以毫无问题地使用 TCP 连接到 cloud_sql_proxy,但我需要配置 unix 套接字才能使用 cloud_sql_proxy 将我的 quarkus 应用程序部署到云 运行)

要使用 UNIX 域套接字进行连接,Reactive Pg 客户端需要 Netty 本机支持。

首先将本机传输 jar 添加到您的项目中:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <classifier>linux-x86_64</classifier>
</dependency>

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-kqueue</artifactId>
    <classifier>osx-x86_64</classifier>
</dependency>

然后在 Quarkus 配置文件中启用本地传输:

quarkus.vertx.prefer-native-transport=true

最后,修复反应式数据库url:

quarkus.datasource.reactive.url=postgresql://:5432/postgres?host=/tmp/cloudsql/proyectA:europe-west1:cloudsql-sandbox-ephemeral