如果队列已满,则发送MessageQueue是否阻塞

时间:2015-09-25 17:02:20

标签: c# mysql .net msmq

我一直在查看有关消息队列的文档,我似乎无法找到我正在寻找的信息。我想要完成的是在调用MySQL数据库过程时记录它的名称,以便跟踪每个过程调用的频率。我的想法是在调用时将名称记录到MessageQueue,并让服务处理队列以定期计算呼叫。这是为了避免为每个过程调用向数据库写入附加记录。由于这不是一个关键功能,我希望能够在队列已满时跳过日志记录。我正在寻找以下信息:

  • 如果队列已满,MessageQueue.Send会阻塞吗?
  • MessageQueue是否在内存或磁盘上存储消息?我想将这一切保留在内存中,所以如果唯一的选择是写入文件,那么我认为这不是我们正在寻找的。

此外,如果我在这里忽略了一个更简单的解决方案,请告诉我。

1 个答案:

答案 0 :(得分:0)

不,完整队列不会阻止。

  • 发送到完整的本地队列将返回异常。
  • 发送到完整的远程队列将丢弃该消息,或根据需要将其移至死信队列。

MSMQ Express消息仅限内存驻留。当系统处于内存压力下时,它们可能被写入磁盘,但它们不会持续存在 - 重启会丢失它们。