MassTransit:发布或离开公交车后,我应该停车吗?

时间:2019-05-15 09:21:24

标签: masstransit

我在这里遇到了问题。我使用的是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;
        }
    }

感谢熟练的人可以提供帮助,非常感谢!

1 个答案:

答案 0 :(得分:1)

您应该在应用程序启动时启动总线,并在应用程序退出时停止总线。否则,直到发布者尝试发布消息之前,您将不知道配置是否正确以及RabbitMQ是否可用。每次发布消息时启动/停止总线也很昂贵,这就是为什么建议使其保持运行状态的原因。