升级到 MassTransit 7,不推荐使用 CreateBrokeredMessageRecevier

Upgrading to MassTransit 7, CreateBrokeredMessageRecevier deprecated

刚刚升级到 .NET 6 并将解决方案中的所有 NuGet 包更新到最新版本,包括 MassTransit,看来 CreateBrokeredMessageReceiver 不再可用。

在 Azure 函数中,我有以下代码创建 BrokeredMessageReceiver 并根据一些泛型配置消费者。

既然 CreatedBrockeredMessageRecevier 已被删除,替代方法是什么?

        [FunctionName("CommandHandler")]
        public async Task HandleCommandAsync(
            [ServiceBusTrigger("%InputQueueName%")] ServiceBusReceivedMessage message,
            IBinder binder,
            CancellationToken cancellationToken)
        {
            ...
                    var handler = Bus.Factory.CreateBrokeredMessageReceiver(
                        binder,
                        cfg =>
                            {
                                cfg.CancellationToken = cancellationToken;
                                cfg.InputAddress = new Uri(
                                    $"{this.settings.Value.ServiceBusUri}/{this.settings.Value.InputQueueName}");
                                if (!Debugger.IsAttached)
                                {
                                    cfg.UseRetry(x => x.Intervals(Consumer<Command>.RetryIntervals));
                                }

                                cfg.Consumer(
                                    GetConsumerType(messageType),
                                    type => this.serviceProvider.GetService(type));
                            });

                    await handler.Handle(message);

                   ...
        }
        private static Type GetConsumerType(string messageType)
        {
            var commandType = typeof(CreateSnippetCommand).Assembly.GetTypes()
                .FirstOrDefault(t => t.Name.Equals(messageType));
            var consumerType = typeof(IConsumer<>).MakeGenericType(commandType);
            return consumerType;
        }

您可以查看 sample 以及内置于 MassTransit 中的 Azure Functions 支持。