我正在使用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);
}