标签: message-queue

在Web应用程序中使用像RabbitMQ这样的消息?

我想了解什么是scenario/usecases/RabbitMQ之类的消息可以帮助消费者Web应用程序.

是否有任何具体的资源可供学习?

目前哪些Web应用程序正在使用此类消息传递方案以及如何使用?

message-queue amqp rabbitmq

15
推荐指数
2
解决办法
8486
查看次数

为什么必须将SetWindowsHookEx与Windows消息队列一起使用

我一直在尝试使用钩子的东西,我不明白为什么钩子必须与消息队列一起使用

hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
        TranslateMessage(&msg);
        DispatchMessage(&msg);
}
UnhookWindowsHookEx(hook);
Run Code Online (Sandbox Code Playgroud)

为什么这样的东西不起作用?

hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, 0);
cin >> aKey;
UnhookWindowsHookEx(hook);
Run Code Online (Sandbox Code Playgroud)

使用增强螺纹和屏障也不起作用.为什么不能以另一种方式完成钩子和钩子之间的等待?

编辑:

我在创建这个示例时犯了一个错误,我创建了一个WH_KEYBOARD_LL挂钩,而不是WH_KEYBOARD,(我认为它不会产生很大的影响)

循环永远不会只在GetMessage函数上等待.

循环仅在我发布退出消息时执行,PostThreadMessage(id, WM_QUIT, 2323, NULL);所以我不明白它在等待时做了什么,是否有一些内部处理?

有关:

C++ SetWindowsHookEx WH_KEYBOARD_LL正确设置

如何在Win32控制台窗口上设置CBT挂钩?

c++ hook message-queue

15
推荐指数
1
解决办法
2万
查看次数

这是使用消息队列的正确方法吗?

我是消息队列的新手,现在我ZeroMQ在我的Linux服务器上使用.我PHP用来写客户端和服务器.这主要用于处理推送通知.

正如他们所展示的那样,我在单个I/O线程实例上使用基本的REQ- REP形式 - 通信模式ZMQContext.

这是最小化的zeromqServer.php代码:

include("someFile.php");

$context = new ZMQContext(1);

//  Socket to talk to clients
$responder = new ZMQSocket($context, ZMQ::SOCKET_REP);
$responder->bind("tcp://*:5555");

while (true) {
    $request = $responder->recv();
    printf ("Received request: [%s]\n", $request);

    //  -----------------------------------------------------------------
    //                                    Process push notifications here
    //
    sleep (1); 

    //  -----------------------------------------------------------------
    //                                          Send reply back to client
    $responder->send("Basic Reply");
}
Run Code Online (Sandbox Code Playgroud)

这是一个最小化的ZeroMQ 客户端:

$context = new ZMQContext();

//  Socket to talk to server …
Run Code Online (Sandbox Code Playgroud)

php sockets linux message-queue zeromq

15
推荐指数
2
解决办法
2527
查看次数

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

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

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

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

您可能会看到此方案与常见的TCP方法类似,这并非偶然.但是,我想知道:

  1. 你能想到一个更好的方法吗?
  2. 你看到我的方法有任何潜在的问题吗?
  3. 您是否有任何其他想法,包括在同一台计算机上使用消息队列而不是TCP实际上可以提高性能(延迟)的可能性?

请记住,之前我没有使用POSIX消息队列(我之前使用过的是IBM WebSphere MQ,但这有点不同).该平台是Linux.

c connection posix client-server message-queue

14
推荐指数
2
解决办法
1万
查看次数

Android:退出Looper?

我有一个线程,我用来定期更新我的Activity中的数据.我创建线程并启动一个looper以使用处理程序postDelay().在我的活动的onDestroy()中,我在我的处理程序上调用removeCallbacks().

我应该打电话handler.getLooper().quit()吗?或者不用担心它,让操作系统处理它?或者它会永远运行,消耗CPU周期?

multithreading android message-queue handler

14
推荐指数
2
解决办法
1万
查看次数

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

我需要查看消息队列而不删除它们.只有符合某些条件,我才会继续删除消息队列项.这该怎么做?以下是我所知道的API - 但似乎没有人支持偷看.

  • mq_close() - 关闭消息队列

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

  • mq_notify() - 当队列变为非空时通知调用进程

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

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

  • mq_send() - 将消息放入消息队列中

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

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

有没有办法在不删除邮件的情况下查看邮件?

c linux message-queue

14
推荐指数
1
解决办法
3168
查看次数

计算JMS队列中的消息数

查看JMS队列并获取其中的所有消息的最佳方法是什么?

如何计算队列中的消息数?

谢谢.

java activemq-classic jms message-queue

14
推荐指数
3
解决办法
2万
查看次数

如何将消息发布到运行消息泵的STA线程?

因此,在此之后,我决定在专用的STA线程上显式实例化COM对象.实验表明COM对象需要一个消息泵,我通过调用它来创建Application.Run():

private MyComObj _myComObj;

// Called from Main():
Thread myStaThread = new Thread(() =>
{
    _myComObj = new MyComObj();
    _myComObj.SomethingHappenedEvent += OnSomthingHappened;
    Application.Run();
});
myStaThread.SetApartmentState(ApartmentState.STA);
myStaThread.Start();
Run Code Online (Sandbox Code Playgroud)

如何从其他线程发布STA线程的消息泵消息?

注意: 为了简洁起见,我对问题进行了大量编辑.@Servy的答案的某些部分现在似乎无关紧要,但它们是针对原始问题的.

c# com interop message-queue sta

14
推荐指数
1
解决办法
8494
查看次数

何时使用消息队列以及何时使用云后台工作程序

我什么时候会使用像ironMQ这样的消息队列?何时我会使用像ironWorker这样的工作处理工作者?

我刚刚开始研究这两个主题,我发现很难区分这两个用途.我理解一个worker或多或少是一个沙盒,它将在app服务器之外的不同环境中运行程序,以增加用户体验.我也理解消息队列很像它的数据库替代方案,其中任务被添加到队列,然后另一个服务器/编程侦听该任务,然后将处理它.然而,虽然我认为我明白他们是什么,但我无法区分何时使用每一个以及为什么.

如果我理解正确,我会使用工作人员完成图像处理等任务.但是为什么我不能为此使用消息队列,更重要的是为什么不呢?当然,我可以在ironMQ中排队一个图像URL,然后再检索并处理它.在我看来,这似乎是一个额外的步骤,所以我会避免这一点.

当工作人员可用时,对于常见任务,消息队列对我来说似乎毫无意义.当然,对于发布评论这样的非密集型任务,我可以让工人这样做吗?

我可能误解了每个工具之间的差异,如果是这样,请让我直截了当.否则,请帮忙.

web-services message-queue background-process ironmq ironworker

14
推荐指数
1
解决办法
3281
查看次数

Google使用laravel队列即时进行地理编码

我有大约100个GPS设备每10秒定期发送坐标.我的客户想要实时反向地理编码,以便在表格视图中查看他的车辆以及位置.我已经设置了一个队列来保存db中的所有数据包,然后我添加了如下所示的地理编码脚本

  1. 使用websocket接收TCP IP消息

    public function onMessage(ConnectionInterface $conn, $msg) {
     //get the message
     // send the dispatch job to save it in db
     $this->dispatch(new SavePacketsToDb($key_1, json_encode(
                                            array(
                                                'company_id' => $key_1,
                                                'vehicle_id' => $company->vehicle_id,
                                                'tracker_id' => $company->tracker_id,
                                                'lat' => $lat,
                                                'lng' => $lng,
                                                'imei' => $imei,
                                                'datetime' => $datetime,
                                                                                )
                             )));   
    
    Run Code Online (Sandbox Code Playgroud)

    }

  2. 运行队列

    public function handle(){
            $lat=$obj->lat;
            $lng=$obj->lng;
    
    
    
    $url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" . $lat . "," . $lng . "&key=mykey";
                    $json = file_get_contents($url);
                    $data = json_decode($json);
                    $status = $data->status;
                    $address = '';
                    if …
    Run Code Online (Sandbox Code Playgroud)

php google-maps message-queue laravel-5 laravel-queue

14
推荐指数
1
解决办法
523
查看次数