如何迁移Rebus中已过时的UseSqlServerInLeaseMode至新版本?
迁移Rebus SqlServer Lease模式至新版本代码示例
过时的UseSqlServerInLeaseMode方法已被官方弃用,新版本需通过UseSqlServer结合AsLeaseTransport配置租约模式。由于SqlServerLeaseTransportOptions的属性需通过配置委托设置(而非直接实例化赋值),以下是可直接编译运行的代码示例:
ASP.NET Core 依赖注入场景
using Rebus.Config; using Rebus.Transport.SqlServer; var builder = WebApplication.CreateBuilder(args); // 从配置文件获取连接字符串和队列名 var connectionString = builder.Configuration.GetConnectionString("RebusSqlServer"); var inputQueueName = "MyApp.InputQueue"; builder.Services.AddRebus(configure => configure .Transport(t => t // 配置基础Sql Server传输 .UseSqlServer(connectionString, inputQueueName) // 开启租约模式并配置选项 .AsLeaseTransport(options => { // 消息租约持续时间 options.LeaseDuration = TimeSpan.FromSeconds(30); // 租约过期容忍时间(防止节点时钟偏差导致的重复处理) options.LeaseTolerance = TimeSpan.FromSeconds(10); // 自动续租租约 options.AutomaticallyRenewLeases = true; // 自定义租约存储表名(可选,默认是RebusLeases) options.LeaseTableName = "CustomRebusLeases"; // 自定义配置存储表名(可选,默认是RebusLeaseOptions) options.OptionsTableName = "CustomRebusLeaseOptions"; })) // 配置路由(根据实际业务调整) .Routing(r => r.TypeBased().MapAssemblyOf<MyApplicationMessage>(inputQueueName)) // 启动Rebus .Start()); var app = builder.Build(); app.Run();
手动配置(非DI场景)
using Rebus.Activation; using Rebus.Config; using Rebus.Transport.SqlServer; var connectionString = "Server=.;Database=RebusDb;Trusted_Connection=True;"; var inputQueueName = "MyApp.InputQueue"; // 使用内置处理器激活器 using var activator = new BuiltinHandlerActivator(); // 注册消息处理器 activator.Register(() => new MyMessageHandler()); var bus = Configure.With(activator) .Transport(t => t .UseSqlServer(connectionString, inputQueueName) .AsLeaseTransport(options => { options.LeaseDuration = TimeSpan.FromSeconds(30); options.LeaseTolerance = TimeSpan.FromSeconds(10); options.AutomaticallyRenewLeases = true; })) .Routing(r => r.TypeBased().MapAssemblyOf<MyApplicationMessage>(inputQueueName)) .Start(); // 示例:发送消息 await bus.Send(new MyApplicationMessage { Content = "Test message with lease transport" }); Console.WriteLine("Press any key to exit..."); Console.ReadKey();
关键注意事项
- 无需手动实例化
SqlServerLeaseTransportOptions,框架会通过AsLeaseTransport的lambda委托自动处理配置 - 若需要初始化数据库表,可在配置中添加
.EnsureTablesAreCreated()(仅建议开发环境使用,生产环境推荐手动执行迁移脚本) - 所有原
UseSqlServerInLeaseMode的参数均可映射到SqlServerLeaseTransportOptions的对应属性,确保业务逻辑一致
内容的提问来源于stack exchange,提问作者Ben Robinson
相关产品推荐
相关产品推荐

