问题标签 [message-queue]

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 投票
2 回答
504 浏览

.net - Impersonation when running a remote triggered job

My (.NET) app allows users to tweak database values. They will then need to generate reports based on their edits, either Crystal or Reporting Services, but that's not important - what is important is that the generation won't definitely be able occur on their local box, e.g. they might not have Crystal Reports (or whatever) installed on their machine.

So I've set up a Message Queue on a network machine (which can generate the reports) and my app will post a message to that queue sending along an object with all the required information. So far, so good.

I've configured the target queue with a rule and a trigger so any new message will automagically provoke a console app on that remote machine to attempt to deal with the message.

The problem is that although everything works fine, the triggered console app runs as the local machine account. The app needs to interact with the database (which uses integrated authentication).

The console app works perfectly when I run it as an actual user, but not when triggered by Message Queuing.

The question is, can I configure the rule, trigger or console app to run as a specific user? I've tried all the config options that I can seem to see, but to no avail.

Perhaps I can impersonate a user within the app's code itself (in app.config)? It's feasible in ASP.NET code, but not in WinForms code by the look of it.

Edit: The impersonation suggestion works well ... right up until the point when I get an error "Access is Denied" from the Process.Start() function, calling startwithcreateprocess().

The user I'm impersonating has permission to run the process on the local box (so it can run natively with no problems).

0 投票
1 回答
1214 浏览

c - 为什么我不能使用 fork() 获得 system V 消息队列?

我这里有一个程序:

该程序应该启动并分叉成 4 个线程。前三个线程调用 msgget() 来创建系统 V 消息队列。

然后他们都调用 msgrcv() 并等待不同的 id 出现。

第四个线程侦听连接的客户端,然后调用 msgsnd()。出于某种原因,没有一个等待消息的分叉再次醒来。

  1. 我确定消息队列是正确的。

  2. 我在 msgsrcv 之前有一个打印语句,所以我可以看到每个语句的分叉都正确发生。之后还有一个打印语句,所以我可以看到代码没有通过它。

  3. 我已经从命令提示符运行了 ipcs。

  4. 肯定创建了一个消息队列,并且其中肯定有一条消息。

  5. 如果我将 msgrcv 更改为“0”,那么其中一个线程将唤醒,但这不是我想要的行为。

  6. msgget() 不会引发错误。

  7. msgsnd() 没有抛出错误。

  8. 我很肯定结构中的 id 是正确的。

任何想法我做错了什么?

0 投票
1 回答
1251 浏览

c - Linux 上的 System V 消息队列无法按预期工作

我有以下应用程序,它复制了我在具有系统 v 消息队列的大型应用程序中遇到的问题。基本上,主函数生成一个密钥,然后使用 msgget() 创建一个消息队列。然后产生了 3 个分叉,每个分叉都有不同的 id。他们每个人都使用不同的正数运行 msgrcv(因此他们正在等待不同的消息)。

然后 Main 休眠几秒钟 a 向 id = 3 发送一条消息。但是唤醒的不是第三个线程,而是另一个线程。此代码是完全隔离的,因此您可以自己尝试。这段代码有什么问题?

如果我等待 2,则表示其结构包含设置为 2 的 mtype 的消息 3 表示 3,依此类推。我的参考点是本指南: http: //www.ecst.csuchico.edu/~beej/guide/ipc/mq.html。有人可以帮忙吗?(您可能需要修改 ftok 代码行以指向您自己机器上的有效文件才能成功测试)。我在 EeePC 1000H 上运行 Fedora 10

0 投票
6 回答
7218 浏览

queue - 消息、队列和 ESB - 我知道我想去哪里,但不知道如何到达那里

长话短说,我正在开展一个项目,出于所有常见原因,我们正在重写一个大型 Web 应用程序。重写的主要目的是将运行在单个服务器上的大型单个应用程序分成许多较小的解耦应用程序,这些应用程序可以在许多服务器上运行。

好的,这就是我想要的:

我想HTTP成为主要的传输机制。当一个应用程序(例如 CMS)已更新时,它将通过 http 联系代理并说"I've changed",然后代理将发回一个200 OK"thanks I got the message"

然后,代理将查看其想要了解 CMS 更改的其他应用程序列表,并将消息传递到应用程序在告诉代理它想听到消息时留下的 url。

其他应用程序将200 OK在收到消息时返回,如果没有,代理会保留该消息并将其排队等待下次有人尝试联系该应用程序。

问题是我什至不知道从哪里开始或者我需要什么来实现它。我一直在看XMPPActiveMQ、等RabbitMQMule ESB并且可以看到我可以在接下来的一年里用这些东西绕圈子。

任何人都可以从个人经验中提供任何建议,因为我很想避免以艰难的方式学习课程。

0 投票
2 回答
5595 浏览

select - Boost Message Queue 不是基于 POSIX 消息队列?无法选择(2)?

我想我会使用 Boost.Interprocess 的消息队列代替套接字在一个主机内进行通信。但是在深入研究之后,似乎这个库出于某种原因避开了 POSIX 消息队列工具(我的 Linux 系统支持),而是在 POSIX 共享内存之上实现。界面非常相似,您可能不会马上猜到,但似乎确实如此。

对我来说不利的是,shm_open(3)select(2)通过mq_open(3).

在这种情况下,Boost 的库似乎丢失了。有谁知道为什么会这样?即使 POSIX 消息队列仅在某些系统上可用,我希望 Boost 在可用的地方使用该工具,并仅在必要时重新实现它。POSIX 系统是否存在一些我还不认识的缺陷?

0 投票
6 回答
14313 浏览

c - 使用 POSIX 消息队列而不是 TCP 套接字 - 如何建立“连接”?

我有现在通过 TCP 通信的客户端和服务器程序。我正在尝试使用 POSIX 消息队列(当然,在客户端和服务器在同一台机器上的情况下)。我希望它能提高性能(特别是通过减少延迟)。

我已经解决了大部分问题,但不确定一件事:如何建立“连接”。服务器同时接受来自多个客户端的连接,所以我很想模拟 TCP 连接建立过程,如下所示:

  1. 服务器打开一个具有已知名称的队列并连续读取它(它可以select(2)与 TCP 一起使用)。
  2. 客户端打开三个队列:两个具有任意名称(包括一些唯一性,例如 PID 以避免冲突),一个具有服务器使用的众所周知的名称。
  3. 客户端向服务器的队列发布一条“连接”消息,包括客户端的队列名称(一个指定用于客户端到服务器的流量,另一个用于相反的流量)。
  4. 服务器打开客户端连接消息中指定的队列,并开始从客户端到服务器的队列中读取(选择)。
  5. 客户端使用众所周知的名称关闭服务器队列。双向通信使用客户端命名的两个队列(每个方向一个)进行。

您可能会看到该方案与常见的 TCP 方法有何相似之处,这绝非偶然。但是,我想知道:

  1. 你能想出更好的方法吗?
  2. 你看到我的方法有什么潜在的问题吗?
  3. 您是否还有其他想法,包括在同一台机器上使用消息队列而不是 TCP 是否会真正提高性能(延迟)?

请记住,我之前没有使用过 POSIX 消息队列(我之前确实使用过 IBM WebSphere MQ,但那是相当不同的)。平台是Linux。

0 投票
3 回答
2698 浏览

python - 在 Python 中实现类似缓冲区的结构

我正在尝试编写一个小型 wsgi 应用程序,它将在每次请求后将一些对象放入外部队列。我想批量制作,即。使网络服务器将对象放入内存中的类似缓冲区的结构中,并在缓冲区足够大或特定超时后将这些对象批量发送到队列的另一个线程和/或进程,并清除缓冲区。我不想陷入 NIH 综合症,也不想打扰线程的东西,但是我找不到适合这项工作的代码。有什么建议么?

0 投票
2 回答
193 浏览

windows - 等待托管代码中的消息

这与之前的一个问题密切相关。

在托管世界中:

  • 如何检查当前线程的消息队列中是否有消息?
  • 如何屈服于操作系统并等待当前线程中的消息(如 GetMessage 或 WaitMessage)?

我正在寻找没有 PInvoke 的托管等效项。

0 投票
8 回答
19987 浏览

python - 关于 Python/Django 和消息队列的建议

我在 Django 中有一个应用程序,需要在各种用例中向用户发送大量电子邮件。出于显而易见的原因,我不想在应用程序中同步处理这个问题。

有没有人对与 Python 很好集成的消息队列服务器有任何建议,或者他们已经在 Django 项目中使用过?我的堆栈的其余部分是 Apache、mod_python、MySQL。

0 投票
3 回答
4110 浏览

c# - 使用 C# 和 VS.NET 2005 延迟处理队列中的消息

这是队列的设置:

  1. 队列是公共的并标记为事务性的。
  2. Web 服务负责将消息插入队列。
  3. Windows 服务正在侦听队列

鉴于此,我怎样才能只处理至少 20 分钟前的消息?