当前位置: 首页 > 面试题库 >

如何在不删除项目的情况下窥视Linux(POSIX)消息队列?

卢深
2023-03-14
问题内容

我需要浏览消息队列而不删除它们。仅当它符合某些条件时,我才会继续删除消息队列项。这个怎么做?以下是我知道的API,但似乎没有一个支持窥视。

  • mq_close() —关闭消息队列

  • mq_getattr() —获取消息队列的当前属性

  • mq_notify() —当队列变为非空时通知呼叫进程

  • mq_open() —打开或创建消息队列

  • mq_receive() —从队列接收消息

  • mq_send() —将消息放入消息队列

  • mq_setattr() —设置消息队列的标志

  • mq_unlink() —取消链接(即删除)消息队列

有没有一种方法可以窥视一条消息而不删除它?


问题答案:

对于消息队列,偷看可能不是一个好主意,因为正如sehe所指出的那样,存在竞争条件的危险。假设您偷看了一条消息;由于您无法锁定队列,因此您将无法可靠地检索到相同的邮件。如果您有两个进程从同一个队列接收互斥的消息,则应考虑将这些消息分成两个队列,以简化设计并保持竞争条件的稳定性。

答案很简单:偷窥是极不可能的,因为它需要显式的锁定语义才能稳定地执行。



 类似资料:
  • 我试图找到类似的问题,但找不到解决我问题的最佳方案。我在应用程序中使用SpringBoot,在代码中使用集成的solace队列。我可以使用以下代码读取solace队列中的消息: 在SpringBoot的帮助下,所有属性(如VPN)都从属性文件中提取,并创建ConnectionFactory。下面是读取消息的代码: 根据消息的类型,定位服务执行器并处理消息。它对我们完全有效。 但是,在某些情况下,我

  • (示例代码张贴在末尾。) 我正在使用EF Core 5数据库优先(即逆向工程POCO)。当使用,后续的抱怨孤儿。是的,很多问 对于代码优先方案,可以将其添加到配置中(从这里): 但首先对DB来说是不现实的。如果数据库为FK关系(此处的文档引用)设置了级联删除,则生成的模型[更正]不包括 并且删除(使用)确实有效,包括。但是... 我在这里面临的问题是,这个“解决方案”要求我们的所有FK关系都在数据

  • 这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无

  • 是否可以从索引中删除单个映射类型而不删除整个索引?https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-mapping.html说这已经不可能了,但我觉得这很难相信。有人能解释为什么删除了该功能吗?似乎是基本的东西。 我有一个具有两个映射的索引。我希望能够删除一种映射类型(以及该类型的所有文档)

  • 我正在建立一个应用程序,并使用MariaDB作为我的数据库。我有一张桌子“kick_votes”。其主键包含三个字段: null

  • 我正在寻找一种方法来刷新我的渐变依赖关系,而不必重新生成项目。我正在使用智能和它的渐变包装器。我尝试过从 IntelliJ 的 gradle UI 运行任务“依赖关系”,我尝试过运行命令 和 ,两者都不起作用。让 gradle 下载新依赖项的唯一方法是使用来自 IntelliJ UI ,但我不喜欢这样做,因为 gradle 会自动运行一些我不想运行的任务,而我只想刷新依赖项。