MassTransit:发布后我应该停下公共汽车还是离开它?
MassTransit: should I stop the bus after publishing or leave it?
我遇到了一个问题。我正在使用 MassTransit 的发布拓扑,并且在配置它之后我没有启动总线,因为我从某个地方看到(忘记了,抱歉)说总线可以在不启动它的情况下发布消息。
发布消息效果很好。所以我想问一下,在我没有启动的情况下,发布后是否应该停车?
如果是,停止它而不是离开它有什么好处?
这是我的发布者 class:
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 Class:
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;
}
}
请高人指点,万分感谢!
您应该在应用程序启动时启动总线,并在应用程序退出时停止它。否则,您将不知道配置是否正确,以及 RabbitMQ 是否可用,直到很久以后您的发布者尝试发布消息时。每次发布消息时 start/stop 总线也很昂贵,这就是为什么保持它并建议 运行 的原因。
我遇到了一个问题。我正在使用 MassTransit 的发布拓扑,并且在配置它之后我没有启动总线,因为我从某个地方看到(忘记了,抱歉)说总线可以在不启动它的情况下发布消息。
发布消息效果很好。所以我想问一下,在我没有启动的情况下,发布后是否应该停车?
如果是,停止它而不是离开它有什么好处?
这是我的发布者 class:
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 Class:
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;
}
}
请高人指点,万分感谢!
您应该在应用程序启动时启动总线,并在应用程序退出时停止它。否则,您将不知道配置是否正确,以及 RabbitMQ 是否可用,直到很久以后您的发布者尝试发布消息时。每次发布消息时 start/stop 总线也很昂贵,这就是为什么保持它并建议 运行 的原因。