问题标签 [mqueue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
849 浏览

ipc - POSIX 消息队列文件夹

几天来,我一直在远程使用 POSIX 消息队列。现在我想在我自己的电脑上做,但我发现没有 /dev/mqueue 文件夹用于创建队列;这意味着我不知道它们在哪里(是否有),所以如果我的程序意外结束,我无法访问那里删除它们。

我注意到由于“僵尸”队列,我的代码无法正常运行,但我无法像处理信号量和共享内存(托管在 /dev/shm 中)那样将它们从该文件夹中删除。

我怀疑可以使用以下命令对此进行一些配置,但我想在更改任何内容之前了解我在做什么。

我希望我已经设法向您展示我的问题,以便有人可以给我一个解决方案。

提前致谢,

爱德华多

0 投票
2 回答
311 浏览

c - C mqueue 不发送或接收整个消息

我尝试使用消息队列实现一个简单的 C 程序,但是该队列不发送或接收长度超过 8 个字符的消息。我试图正确设置所有参数,但我一定遗漏了一些东西。

下面是代码和输出。

代码:

输出:

0 投票
1 回答
109 浏览

apache-camel - 你能像我们在 Mqueue 中那样阅读 camunda 中的消息吗?

我们可以像在 Mqueue 中那样在 camunda 中阅读消息吗?camunda 可以替代 Apache 骆驼路由框架吗?

0 投票
1 回答
1009 浏览

c - mqueue 接收到错误的数据

下面是处理器农场作业的代码。重点是“这里 $resp 总是相同/不同”的评论。这就是我的问题:当工作进程完成它的工作并将响应数据发送给农民时,农民总是收到相同的响应数据(相同的指针地址),即使工作人员每次发送不同的数据。

示例:工人在地址发送数据:0x7fff42318a90,等0x7ffddba973900x7ffc69e8e060而农民只从一个地址接收数据0x7ffdb1496f30

我已尽我所能将代码和问题尽可能地抽象出来。如果我遗漏了重要信息,请告诉我,我是流程管理编程的新手,我可以使用一些指导。

更新:还打印respsa的内容,resp.b其中b是一个整数,返回相同的值,即使 worker 中的值不同。

更新:我尝试编写一些可运行的代码,只是这次工人可能没有收到。

//在农民和工人中

//农民:

//工人:

0 投票
1 回答
516 浏览

c - 使用 mqueue.h 和 -lrt 配置 ceedling

我正在使用Throw The Switch 的 Ceedling /Unity/CMock 组合作为单元测试框架为 C 语言项目编写单元测试。

我遇到了一个有趣的困境,我mqueue.h在其中一个单元测试中使用。当测试编译时,我得到 gcc 链接器未定义的引用错误mq_open()mq_close()等等。

据我了解,基于此发现, -lrt 标志需要放在 gcc 命令的末尾 - 在列出源(和可执行文件?)之后gcc test_foo.c -lrt。不幸的是, ceedling 被写在 command: 之后放置标志gcc -lrt test_foo.c,我找不到改变顺序的方法。

Ceedling 提供的文档仅涉及如何向 gcc 命令添加标志,而不是如何更改顺序。我试过在 Ceedling 的大量源代码中四处寻找,但它是用我不熟悉的 Ruby 编写的。

所以我的问题是:

  1. -lrt 的放置是否真的影响 mq_*() 的链接
  2. 关于如何更改 -lrt 标志的位置的任何想法?
0 投票
1 回答
1699 浏览

python - 不能创建超过 10 个 mqueue

我正在使用一个包装了 posix 实时扩展来获取 MessageQueues 的 python 模块。

这是python代码

这将在报告之前创建大约 10 个 mqsOSError: This process already has the maximum number of files open

我查看了 mq 限制和 rlimit 并检查它们是否都设置得非常高。例如

即使对于特权用户,它仍然只会创建大约 10 个队列。

直接使用实时扩展的等效 C 如下

(编译gcc -lrt test.c)但这一次只能让我打开 20 个 mqs。实际上,我希望一次打开几百甚至一千个。

有人有任何想法或建议吗?

编辑:C 版本中更好的错误检查。还是满分。

0 投票
1 回答
124 浏览

c++ - 使用 mqqueue 将数据读入缓冲区时出现问题

我正在使用mqueue在线程之间进行通信,但在传递对象时遇到问题。

mq_send并将mq_receiveachar*作为对象的参数。

我通过以下方式使用它们。

然后

到现在为止还挺好。

问题就在这里

我第二次施放缓冲区时,我得到了垃圾。我读到了static_castdynamic_cast但我找不到问题所在。

怎么了?

0 投票
1 回答
226 浏览

c - 增加 mqueue 消息大小后无法创建多线程

在我的 C 软件中,我创建了 10 个线程(多线程)并将消息写入消息队列中。我还创建了另外 1 个线程来监视队列并从队列的另一端排出数据。

它运行正常,但消息大小被卡住为默认值(10)。

我从论坛了解到通过运行“echo number>/proc/sys/fs/mqueue/msg_max”来增加 mqueue 大小,我在 Linux(Ubuntu)中将“number”设置为 100。

但是在此更改之后,当我再次执行我的软件时,我无法创建(pthread_create)超过 4 个线程。其他 7 个线程创建报告错误。除了队列太小之外,一切都很好。

请问如何恢复msg_max的默认值,以便我可以再次运行该软件?

还有其他方法可以增加 mqueue 的大小吗?

非常感谢。

干杯,

珍妮丝

0 投票
0 回答
107 浏览

c++ - 如何等到 mqueue 创建可用?

我必须编写大量使用来自 mqueue.h 的队列的程序。问题是它很容易达到/proc/sys/fs/mqueue/queues_max我无法改变的极限。是否可以等到可以创建新队列而无需硬旋转?我的意思是

0 投票
1 回答
1549 浏览

java - MQ 队列 vs 批处理:异步进程失败时如何重播

作为中间件开发的一部分,我需要在两种机制之间进行选择来进行异步处理(可能会重放失败案例)我有以下两种技术的想法:

  • 使用 MQ 队列(发生错误时,在拒绝队列中插入一条消息并稍后重播)

  • 使用数据库来存储失败的情况,并在以后转一个批次来重播它们。

技术环境是Java(jdlk 8 + wildfly + REST web services作为中间件入口)

您能否通过比较两种技术的优缺点来指导我,如果有更好的解决方案,将受到欢迎。

在此先感谢您的帮助。