升级到 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 支持。
刚刚升级到 .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 支持。