【发布时间】:2020-02-13 22:42:34
【问题描述】:
我有 2 个应用程序,一个是事件发布应用程序,一个是事件消费者应用程序。 发布者使用 SimpleInjector:
container.AddMassTransit(x =>
{
x.AddBus(() => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(ConfigurationValuesProvider.Current.Get("RabbitHostName"), hostConfigurator =>
{
});
}));
});
消费者使用 CastleWindsor:
container.AddMassTransit(x =>
{
x.AddBus(context => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(configurationProvider.RabbitHostName);
x.AddConsumer<FactAddedHandler>();
x.AddConsumer<FactAddedWebhookHandler>();
x.AddConsumer<FactMonitorHandler>();
cfg.ConfigureEndpoints(container);
}));
});
一切正常,尽管我尝试通过 consumer 注册使我发布的一些消息不耐久:
x.AddConsumer<FactAddedHandler>().Endpoint(e =>
{
e.Temporary = true;
});
通过这种方式,队列被标记为临时队列,并在应用程序关闭后立即被删除。但我只希望消息不持久,我希望队列在应用程序出现故障时仍处于启动状态并准备就绪。有没有办法做到这一点?
【问题讨论】:
-
“不耐用”是什么意思?例如,您可以使用 RMQ 策略来强制执行消息 TTL(这意味着 X 秒后未使用的消息将从队列中删除)。
-
对于非持久性我的意思是不持久化在磁盘上。这意味着如果它们在队列中并且 RabbitMQ 出现故障,它们不需要保存在磁盘上。所以当 RabbitMQ 再次上去的时候,他们就迷路了,没人在乎
-
您应该创建一个消费者定义并覆盖配置方法以访问接收端点配置器。 masstransit-project.com/usage/containers/#definition
标签: .net rabbitmq masstransit