Rebus 7升级至Rebus 8时ISubscriptionStorage重复注册异常求助
解决Rebus 8升级中ISubscriptionStorage重复注册异常
问题原因
Rebus 8的配置逻辑有变更,默认会自动注册一个ISubscriptionStorage实现(通常是内存版),当你手动调用StoreInPostgres再次注册该服务时,就会触发重复注册的异常。
解决方案
1. 替换默认注册而非重复注册
在配置PostgreSQL订阅存储时,使用Replace方法替换掉默认的注册实例,避免重复:
configurer.Replace(c => { var connectionString = "你的PostgreSQL连接字符串"; var connectionProvider = c.Get<IPostgresConnectionProvider>(); return new PostgresSubscriptionStorage( connectionProvider, tableName: "subscriptions", isCentralized: true, automaticallyCreateTables: true ); });
2. 清理重复配置代码
排查总线初始化代码,确认是否有其他地方(比如第三方扩展、其他配置段)已经注册了ISubscriptionStorage,如果存在重复配置,移除多余的注册逻辑。
3. 适配Rebus 8的PostgreSQL配置API
Rebus 8对PostgreSQL扩展的配置方式有调整,确保使用最新的链式配置写法:
Configure.With(yourActivator) .Transport(t => t.UsePostgreSql("连接字符串", "输入队列")) .Subscriptions(s => s.StoreInPostgres("连接字符串", "subscriptions", isCentralized: true)) // 其他配置项... .Start();
注意:如果使用集中式订阅存储,确保isCentralized参数设置符合你的业务场景,Rebus 8对该参数的处理逻辑有优化。
验证
配置完成后启动程序,确认异常消失,同时测试发布/订阅流程,验证功能正常。
内容的提问来源于stack exchange,提问作者xhafan
相关产品推荐
相关产品推荐

