使用 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
我正在尝试使用 (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