我在这里遇到了问题。我使用的是MassTransit的发布拓扑,配置完后我没有启动总线,因为我从某个地方看到(忘记了,对不起)说总线可以发布消息而无需启动它。
它可以很好地发布消息。因此,我想问一问,发布后应该在没有启动的情况下停止总线吗?
如果是的话,停止它而不是离开它有什么好处?
这是我的Publisher类:
public class MessagePublisher<TMessage> : IPublisher<TMessage> where TMessage : class
{
private readonly IBusControl _busConsControl;
public MessagePublisher(BusConfigurationDto config)
{
_busConsControl = config.CreateBus();
}
public async Task PublishMessageAsync(TMessage message)
{
await _busConsControl.Publish(message);
}
}
和BusConfigurationDto类:
public class BusConfigurationDto
{
public string Host { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string ExchangeName { get; set; }
public string QueueName { get; set; }
public IBusControl CreateBus()
{
IBusControl bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
IRabbitMqHost host = cfg.Host(new Uri(Host), hostConfigurator =>
{
hostConfigurator.Username(UserName);
hostConfigurator.Password(Password);
});
cfg.ReceiveEndpoint(host, QueueName, ep =>
{
ep.Bind(ExchangeName, s => { s.Durable = true; });
});
});
return bus;
}
}
感谢熟练的人可以提供帮助,非常感谢!
答案 0 :(得分:1)
您应该在应用程序启动时启动总线,并在应用程序退出时停止总线。否则,直到发布者尝试发布消息之前,您将不知道配置是否正确以及RabbitMQ是否可用。每次发布消息时启动/停止总线也很昂贵,这就是为什么建议使其保持运行状态的原因。