MassTransit在停止后开始

时间:2017-12-04 13:11:46

标签: c# rabbitmq masstransit

我正在使用masstransit 3.5.7 nuget over rabbitmq。 我需要支持启动/停止功能(停止后启动)。

如何正确完成?

目前,我这样实现:

private IBusControl _busControl;

public async Task Start()
{
    if(_busControl == null)
    {
        InitBus();
    }

    if (_busControl != null)
    {
        var busBundle = await _busControl.StartAsync().ConfigureAwait(false);
        BusReady busReady = await busBundle.Ready;

        bool isStarted = IsBusStarted();

        if(!isStarted)
            throw new Exception("Message bus stopped");                
    }
}


public async Task Stop()
{
    if (_busControl != null)
    {
        await _busControl.StopAsync().ConfigureAwait(false);
        bool isStarted = IsBusStarted();

        if (isStarted)
            throw new Exception("Message bus not stopped");

        _busControl = null;
        }
    }
}

函数IsBusStarted也在其他地方使用 - 我需要知道masstransit的当前状态。

private bool IsBusStarted()
{
    if (_busControl == null)
        return false;

    FieldInfo fieldInfo = _busControl.GetType().GetField("_busHandle", BindingFlags.NonPublic | BindingFlags.Instance);
    var busBundle = fieldInfo.GetValue(_busControl);

     if (busBundle == null)
         return false;

     PropertyInfo prop = busBundle.GetType().GetProperty("Stopped");
     MethodInfo getter = prop.GetGetMethod(nonPublic: true);

     return !(bool)getter.Invoke(busBundle, null);            
 }

0 个答案:

没有答案