【发布时间】:2023-03-08 14:07:01
【问题描述】:
我们最近发生了一次中断,由于我们的兔子集群被人为地赋予了高负载,我们的一个 API 变得无响应。我们在单声道(.NET)中用尽线程并且对 API 的请求失败。尽管这种情况不太可能再次发生,但我们希望对此进行一些保护。理想情况下,我们会在一段时间后调用 bus.Publish() 超时,但我们无法确定如何进行。
然后我们遇到了 RabbitMQ 的阻塞连接通知功能,并认为这可能会有所帮助。但是,我们无法弄清楚如何获取 IServiceBus 中的连接对象。到目前为止,我们已经尝试过
_serviceBus = serviceBus;
var connection =
((MassTransit.Transports.RabbitMq.RabbitMqEndpointAddress) _serviceBus.Endpoint.Address)
.ConnectionFactory.CreateConnection();
connection.ConnectionBlocked += Connection_ConnectionBlocked;
connection.ConnectionUnblocked += Connection_ConnectionUnblocked;
但是当我们这样做时,我们会得到一个我不明白的 BrokerUnreachableException。
我的问题是,这是检测超时和失败的正确方法吗(我们有一个备份机制来收集消息中的数据并稍后重新发布),如果正确,我们如何使其工作?
【问题讨论】:
-
我们有一项服务,所有其他服务都向其中发送注册消息,然后每分钟使用 saga 进行 ping 操作。如果没有响应,无论出于何种原因,我们都会将服务状态设置为“关闭”,并向应该查看的人发送一封电子邮件。这解决了许多问题,包括您描述的问题。
标签: c# mono rabbitmq masstransit