如果队列已满,MessageQueue 是否会阻止发送
Does a MessageQueue block on a send if the queue is full
我一直在查看有关消息队列的文档,但似乎找不到我要查找的信息。我想要完成的是在调用时记录 MySQL 数据库过程的名称,以便跟踪调用每个过程的频率。我的想法是在调用时将名称记录到 MessageQueue 中,并让服务处理队列以定期对调用进行计数。这是为了避免为每个过程调用向数据库写入额外的记录。由于这不是一个关键功能,如果队列已满,我希望能够跳过日志记录。我正在寻找以下信息:
- 如果队列满了,MessageQueue.Send会阻塞吗?
- MessageQueue 是将消息存储在内存中还是磁盘上?我想将所有这些都保存在内存中,所以如果唯一的选择是写入文件,那么我认为这不是我们要找的。
此外,如果我在这里忽略了更简单的解决方案,请告诉我。
不,队列已满不会阻塞。
- 发送到一个完整的本地队列将return一个异常。
- 发送到已满的远程队列将丢弃消息,或视情况将其移动到死信队列。
MSMQ Express 消息仅驻留在内存中。当系统处于内存压力下时,它们可能会写入磁盘,但它们不会持久存在 - 重新启动会丢失它们。
我一直在查看有关消息队列的文档,但似乎找不到我要查找的信息。我想要完成的是在调用时记录 MySQL 数据库过程的名称,以便跟踪调用每个过程的频率。我的想法是在调用时将名称记录到 MessageQueue 中,并让服务处理队列以定期对调用进行计数。这是为了避免为每个过程调用向数据库写入额外的记录。由于这不是一个关键功能,如果队列已满,我希望能够跳过日志记录。我正在寻找以下信息:
- 如果队列满了,MessageQueue.Send会阻塞吗?
- MessageQueue 是将消息存储在内存中还是磁盘上?我想将所有这些都保存在内存中,所以如果唯一的选择是写入文件,那么我认为这不是我们要找的。
此外,如果我在这里忽略了更简单的解决方案,请告诉我。
不,队列已满不会阻塞。
- 发送到一个完整的本地队列将return一个异常。
- 发送到已满的远程队列将丢弃消息,或视情况将其移动到死信队列。
MSMQ Express 消息仅驻留在内存中。当系统处于内存压力下时,它们可能会写入磁盘,但它们不会持久存在 - 重新启动会丢失它们。