【发布时间】:2018-02-09 18:53:54
【问题描述】:
应用程序:ServiceStack 上的 .NET WebServer 使用 RabbitMQ 通过 RabbitMQServer 类托管服务。
基础设施:WebServer 和 RabbitMQ 位于不同的 Docker 容器中。
问题:在启动 WebServer App 期间,它必须连接到 RabbitMQServer.Start(),但连接失败,因为与 Rabbit 的容器尚未启动。
我想尝试检查与 Rabbit 的连接能力并在 .NET 任务中启动 RabbitMQServer。 RabbitMQServer 类线程安全吗?
我的代码:
...
RabbitMQServer _rabbitMqServer = ...;
...
public void Start()
{
Task.Run(() => TryToStart());
}
private void TryToStart()
{
var tryIndex = 0;
const int tryCount = 10;
const int tryTimeoutStep = 3000;
const int tryMaxTimeout = 30000;
while (tryIndex < tryCount)
{
tryIndex++;
try
{
_logger.Info("Próba połączenia z RabbitMQ ...");
((RabbitMqMessageFactory) _rabbitMqServer.MessageFactory).ConnectionFactory.CreateConnection();
// nie ma BrokerUnreachableException
_rabbitMqServer.Start();
return;
}
catch (BrokerUnreachableException e)
{
var millisecondsTimeout = Math.Min(tryTimeoutStep * tryIndex, tryMaxTimeout);
_logger.Error($"{e.Message} - czekam {millisecondsTimeout / 1000}s ...");
Thread.Sleep(millisecondsTimeout);
}
}
_logger.Error("Nie połączono z RabbitMQ!");
}
【问题讨论】:
-
您介意重新表述您的问题吗?我不知道你想问什么。 RabbitMQ 服务器不是对象,根据该定义不能是“线程安全的”。
-
重新措辞 - 完成
标签: rabbitmq servicestack