Hyperledger Aries DotNet Mediator配置PostgreSQL数据库问题求助(NuGet 1.5.5版本)
背景
你正在使用NuGet版本1.5.5的Hyperledger.Aries.Routing.Mediator,尝试将默认SQLite钱包存储替换为Hyperledger Indy-Postgres Plugin,已经配置了options.WalletConfiguration.StorageType = "postgres_storage"及相关参数,但启动时触发异常:
Unhandled exception. Hyperledger.Indy.WalletApi.UnknownWalletTypeException: The wallet type specified has not been registered.
下面针对你的三个问题逐一解答:
1. 是否需要在其他位置执行额外的初始化操作?
是的,必须先注册Postgres存储插件,才能让Indy SDK识别到postgres_storage类型。Indy SDK默认只内置了SQLite存储支持,第三方存储插件需要手动注册后才能被识别。
在.NET环境中,你需要在钱包初始化前的启动逻辑(比如Program.cs的Mediator初始化代码段)添加注册代码:
using Hyperledger.Indy.Utils; // 根据运行环境替换插件文件名:Linux用libindystrgpostgres.so,Windows用indystrgpostgres.dll,macOS用libindystrgpostgres.dylib await IndyUtils.RegisterWalletPluginAsync("postgres_storage", "libindystrgpostgres.so");
这一步是解决UnknownWalletTypeException的核心操作,必须放在钱包创建或初始化的代码之前执行。
2. 如何安装Hyperledger Indy-Postgres Plugin插件?
安装方式分环境不同有两种常用方案:
方案一:Linux系统通过包管理器安装
如果是Debian/Ubuntu系Linux,可以通过Indy官方源直接安装:
# 添加Indy SDK软件源 echo "deb https://repo.sovrin.org/sdk/deb bionic stable" | sudo tee /etc/apt/sources.list.d/indy-sdk.list sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 68DB5E88 # 更新源并安装Postgres存储插件 sudo apt-get update sudo apt-get install -y libindy-postgres-storage
安装完成后,插件文件会自动放在系统默认库路径,注册时直接用libindystrgpostgres.so即可。
方案二:Windows/macOS手动安装
对于Windows或macOS,可以直接下载预编译插件或自行编译:
- 从Indy SDK的官方发布页面下载对应平台的插件压缩包
- 解压后将插件文件(
indystrgpostgres.dll/libindystrgpostgres.dylib)放在应用程序可访问的路径(比如和exe同目录,或系统库目录) - 确保应用程序拥有该文件的读取权限
3. 除了indy-sdk官方文档之外,是否存在其他相关的配置文档?
除了官方文档,还可以参考这些实用资源:
- Aries Framework .NET示例代码:在项目的GitHub仓库里,有部分自定义存储的示例,包含Postgres存储的配置细节
- 社区讨论记录:Hyperledger Aries的Discord社区、GitHub Discussions里,很多开发者分享过实际配置Postgres的踩坑经验和解决方案
- Mediator项目Issue:查看
Hyperledger.Aries.Routing.Mediator的GitHub Issue,能找到其他用户遇到的同类问题及解决办法
最后补充一个完整的Postgres存储配置示例,供你参考:
options.WalletConfiguration = new WalletConfiguration { Id = "mediator-wallet", StorageType = "postgres_storage" }; options.WalletCredentials = new WalletCredentials { StorageCredentials = new Dictionary<string, string> { {"url", "postgresql://your_username:your_password@localhost:5432/indy_mediator_wallet"}, {"max_pool_size", "10"} // 可选,设置数据库连接池大小 } };
注意替换配置中的用户名、密码、数据库地址和库名,且要确保Postgres中已经提前创建好对应的数据库。
内容的提问来源于stack exchange,提问作者tkdp

