You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何迁移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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:50:06