公共交通不会更新现有 Azure 服务总线队列的设置



如果我向特定队列发送消息,在创建队列之前,将自动为我创建一个队列。

问题是,当添加新的消息/队列时,它会导致一种竞争条件。如果生产者服务在消费者服务启动之前启动并生成消息,那么将使用默认值创建一个新队列。当使用者服务启动时,我希望它能用我想要的特定配置重新配置现有队列,但它不会更改任何内容(AutoDeleteOnIdleMaxSizeInMegabytes等(。

有推荐的方法吗?:思考:接收(和订阅端点(是所有服务都应该全局配置的东西,所以";第一个赢了"?

生产者服务:

private void ConfigureMassTransit(IServiceCollection services, string asbConnectionString)
{
services.AddMassTransit(x =>
{
x.UsingAzureServiceBus((context, cfg) =>
{
cfg.Host(asbConnectionString);
});
});
services.AddMassTransitHostedService(true);
}
...
private async SendAsync() {
var sendEndpoint = await _bus.GetSendEndpoint(IMyCommand.QueueUri);
await sendEndpoint.Send<IMyCommand>(new MyCommand { CommandText = $"The time is {DateTimeOffset.Now}" });
}

消费者服务:

private void ConfigureMassTransit(IServiceCollection services, string asbConnectionString)
{
services.AddMassTransit(x =>
{
x.AddConsumer<MyCommandConsumer>();
x.UsingAzureServiceBus((context, cfg) =>
{
cfg.Host(asbConnectionString);

cfg.ReceiveEndpoint(IMyCommand.QueueName, configurator =>
{
configurator.PublishFaults = false;
configurator.AutoDeleteOnIdle = TimeSpan.FromDays(30);
configurator.MaxSizeInMegabytes = 2048;
configurator.ConfigureConsumeTopology = false;
configurator.ConfigureConsumer<MessageCommandConsumer>(context, consumerConfigurator =>
{
consumerConfigurator.UseConcurrencyLimit(20);
consumerConfigurator.UseMessageRetry(r => r.Interval(2, 100));
});
});
});
});
services.AddMassTransitHostedService(true);
}

一般指导意见是,消费服务应该在生产服务之前部署/启动。公共汽车在启动之前不应该使用。

虽然其中一些值可以指定为目标地址上的查询参数,但Azure服务总线仅支持autodeletetype(其中只有一个对最终用户有用(。

队列描述/设置不会更新,因为如果服务不一致,它们会不断更改。

更新:另一个原因是,有些人使用资源管理器脚本(或类似Terraform的脚本(部署他们的主题/队列,如果MassTransit更改了它们,就会通过删除它们的自定义设置来破坏这些部署

最新更新