标签: message-queue

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

我以为我会使用Boost.Interprocess的Message Queue代替套接字在一个主机内进行通信.但是在深入研究之后,似乎这个库出于某种原因避开了POSIX消息队列工具(我的Linux系统支持),而是在POSIX共享内存之上实现.界面足够相似,你可能不会立即猜测,但似乎是这样.

我的缺点是获得的共享内存shm_open(3)似乎不可用select(2),而不是通过获得的POSIX消息队列mq_open(3).

在这种情况下,Boost的图书馆似乎失败了.有谁知道为什么这应该是?即使POSIX消息队列仅在某些系统上可用,我也希望Boost在可用的情况下使用该设施,并且只在必要时重新实现它.POSIX系统是否存在一些我尚未认识到的陷阱?

select boost epoll message-queue interprocess

8
推荐指数
1
解决办法
5376
查看次数

有没有比postcat更好的工具来查看postfix邮件队列文件?

所以今天早上我接到一个电话,询问客户是否需要查看他们在我们的辅助邮件服务器上等待发送的电子邮件.他们的主服务器的链接已经(仍然)已经停止了两天,他们需要看到他们的电子邮件.

所以我编写了一个快速的Perl脚本,将mailq与postcat结合使用,将每个电子邮件的地址转储到单独的文件中,然后将其关闭并发送出去.可怕的代码,我知道,但这很紧急.

我的解决方案工作正常,因为它至少提供了原始视图,但我想今晚如果我有一个解决方案可以提供他们的电子邮件附件并且可能删除一些"垃圾"标题文本也会很好.大多数重要的电子邮件似乎都附有PDF或类似内容.

我一直在环顾四周,但查看队列文件的唯一方法是我可以看到的是postcat命令,我真的不想编写自己的解析器 - 所以我想知道你们中是否有人已经这样做过,或者知道更好的命令使用?

这是我当前解决方案的代码:

#!/usr/bin/perl

$qCmd="mailq | grep -B 2 \"someemailaddress@isp\" | cut -d \" \" -f 1";

@data = split(/\n/, `$qCmd`);
$i = 0;

foreach $line (@data)
{
    $i++;

    $remainder = $i % 2;
    if ($remainder == 0)
    {
            next;
    }

    if ($line =~ /\(/ || $line =~ /\n/ || $line eq "")
    {
        next;
    }
    print "Processing: " . $line . "\n";
    `postcat -q $line > $line.email.txt`;
    $subject=`cat $line.email.txt | grep "Subject:"`;
    #print "SUB" . …
Run Code Online (Sandbox Code Playgroud)

email perl parsing postfix-mta message-queue

8
推荐指数
1
解决办法
5196
查看次数

处理数百万个定时(预定)消息的解决方案?

我正在评估处理大量排队消息的可能解决方案,这些消息必须在特定日期和时间发送给工作人员.执行它们的结果主要是对存储数据的更新,并且它们最初可能或可能不是由用户动作触发的.

例如,想想你在假想的大型星际争霸游戏服务器中实现的内容,用于存储和执行用户的操作,例如升级建筑物,孵化士兵,所有这些都需要在几秒钟后应用于游戏状态玩家启动后几分钟.

问题是我似乎无法找到正确的术语来命名这个问题区域.有几个看起来相似但不同:

cron /任务/作业调度程序

  • 队列的内容不是动态的,而是预定义的.
  • 每项任务都已安排.

消息队列

  • 队列的内容是动态的.
  • 每项任务都是为了立即交付.

???

  • 队列的内容是动态的.
  • 每项任务都已安排.

如果有消息队列允许有条件地传递消息,那可能就是这样.

摘要:

  1. 这些技术被称为什么?
  2. 有哪些解决方案?

message-queue scheduled-tasks

8
推荐指数
1
解决办法
1995
查看次数

繁忙的应用程序导致Windows 7上的错误"无响应"状态 - WM_UPDATE

在长期操作期间,我们的C++ Win32应用程序显示一个带有进程条的模态状态对话框,每隔几秒左右就会更新一次.从Windows 7开始,我们意识到Windows很快会显示一条消息"似乎挂起......"和/或在我们的窗口标题栏中附加"不响应".

我们发现进程对话框必须处理消息以避免这种情况.更具体地说,似乎Windows 7不断发送WM_UPDATE消息以检查我们的程序是否存活.我们以前在此对话框中禁用了所有不需要的消息处理,因为配置文件运行显示它们是一个主要的减速.

但是虽然我们认为已经修复了这个问题,但是用户再次报告了这些问题:Windows显示"似乎挂起......"和/或在我们的窗口标题栏中附加"不响应",尽管我们每隔几秒就会处理所有事件.

问题:

  • 是否有关于Windows 7(或Windows Vista)中此行为更改的任何文档?我们还没有发现任何.我们还发现了许多其他消息传递行为的变化.

  • 是否有可能从Windows禁用所有这样的"活着"检查?我们的应用程序非常活跃,流程可能需要很长时间.

编辑:更具体一点 - 我们每隔几秒钟才会调用消息泵PeekMessage/ TranslateMessage/ DispatchMessage.

由于这是一个相当古老的遗留程序,因此在不久的将来不可能使用单独的工作线程.我们当然会为新代码做到这一点.请注意,我的主要观点是这种行为肯定会在Windows Vista/Windows 7中发生变化.我还没有找到任何文档.

c++ winapi message-queue windows-7

8
推荐指数
1
解决办法
7804
查看次数

Posix消息队列 - 多作者和多读者

我对队列(POSIX)感到困惑.是否需要保护队列中的多个写入器或队列中的多个读取器?

多个线程将写入队列,多个线程将从队列中读取.

正如定义所说"消息队列可以有许多读者和许多作者".但它并不是说它是否需要保护.这两条消息应该受互斥锁保护吗?

mq_send(mqd_t mqdes,const char*msg_ptr,size_t msg_len,unsigned msg_prio); mq_receive(mqd_t mqdes,char*msg_ptr,size_t msg_len,unsigned*msg_prio);

请有人帮帮我吗?提前致谢.

posix message-queue

8
推荐指数
1
解决办法
3882
查看次数

在MSMQ上是否有任何事件或回调添加到队列的新消息

我有两个组件.一个是Window应用程序,另一个是Window Service.
Window应用程序写入Message Queue(MSMQ)和Service正在读取它并处理该消息.
应该服务总是继续寻找新消息的队列...在代码方面我应该
使用无限while循环或Timer
OR
是否有任何事件或回调队列新消息添加到队列?这样当窗口应用程序向队列添加新消息时,Service就可以知道了.
这就是我要求使我的应用程序高效,所以如果有任何其他方法来实现这一点,你可以建议.
谢谢阅读

c# msmq message-queue

8
推荐指数
1
解决办法
4784
查看次数

使用EasyNetQ for RabbitMQ时的自定义错误队列名称?

我没有让我的未处理异常进入EasyNetQ_Default_Error_Queue,我想知道是否有一种方法可以显式地说明应该用于给定应用程序的错误队列的名称,所以错误不会在这一个EasyNetQ_Default_Error_Queue中结束吗?

我可以看到如何指定常规消息队列名称,但没有找到任何有关错误队列名称的信息.

.net c# message-queue rabbitmq easynetq

8
推荐指数
1
解决办法
1605
查看次数

Apache Camel中窃听和多播有什么区别

Camel中的wireTap和多播的默认行为似乎相似.这两者都有助于以不同的方式处理相同的消息.那么wireTap和组播之间的主要区别是什么?

java jms multicast message-queue apache-camel

8
推荐指数
1
解决办法
2728
查看次数

.Net Core:“范围”依赖注入的自定义范围。一个控制器

我有一个应用程序,它不通过控制器接收普通 HTTP 请求,而是侦听并接收消息(AMQP 协议)以启动其逻辑流。

我的应用程序一次可能会接收和处理多于 1 条消息。我有一个对象,它将在整个过程中在几个不同的服务/类中收集信息/数据,以便我最终使用它。但我需要根据收到的消息将数据分开,因为“范围”注入会将注入的实例与其他 HTTP 请求分开。

因此,我的用例与我在普通 API 中使用 Scoped 注入对象的方式非常相似,但我在侦听器中收到一条消息,而不是新的 HTTP 请求。

有什么方法可以为收到的每条消息创建一个自定义范围,无论是通过某种配置,还是让代码创建一个新范围作为我的 Listener.MessageReceived(Message message) 方法中的第一件事?

想象一下这样的流程:

public class Listener {
    ServiceClassA serviceClassA //injected in constructor
    CustomLogger customLogger // (HAS TO BE SAME OBJECT INJECTED INTO ServiceClassA, ServiceClassB and Listener)

    public void ReceiveMessage(Message message) {
        using (var scope = CreateNewScope()) {
            try {
                serviceClassA.DoStuff();
            } catch(Exception e) {
                Console.Write(customLogger.GetLogs())
            }
        }
    }
}


public class ServiceClassA {
    ServiceClassB serviceClassB //injected in constructor
    CustomLogger customLogger //(HAS TO …
Run Code Online (Sandbox Code Playgroud)

scope dependency-injection message-queue amqp .net-core

8
推荐指数
1
解决办法
4180
查看次数

发布/订阅主题的 GCP Cloud Function 触发器速率限制

我有一个从 Pub/Sub 主题触发的云函数。

我想对我的 Cloud Function 进行速率限制,因此我将最大实例设置为 5。在我的情况下,生成的消息将比 Cloud Functions 更多(并且我想限制正在运行的 Cloud Functions 的数量)。

我预计这个过程的行为类似于 Kafka/队列 - 主题消息将被累积,云函数将慢慢消耗消息,直到主题为空。

但似乎所有没有触发云功能(ack)的消息,只是发送了一个UNACK - 并留下了。我的订阅详情:

在此输入图像描述

确认截止时间最大值对我来说太低了(由于速率限制,云功能可能需要几个小时才能收到消息)。

我可以在 Pub/Sub 中更改哪些内容来满足我的需求?或者我需要添加一个队列?(Pub/Sub 发送到任务队列,Cloud Function 消耗任务队列?)。

顺便说一句,发布/订阅数据实际上是 GCS 事件。如果这是 AWS,我只需将 S3 文件创建的事件发送到 SQS,并让 Lambda 在队列的另一端进行使用。

任何帮助,将不胜感激。

message-queue publish-subscribe google-cloud-platform google-cloud-pubsub google-cloud-functions

8
推荐指数
1
解决办法
1491
查看次数