我想了解什么是scenario/usecases/RabbitMQ之类的消息可以帮助消费者Web应用程序.
是否有任何具体的资源可供学习?
目前哪些Web应用程序正在使用此类消息传递方案以及如何使用?
我一直在尝试使用钩子的东西,我不明白为什么钩子必须与消息队列一起使用
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);所以我不明白它在等待时做了什么,是否有一些内部处理?
有关:
我是消息队列的新手,现在我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) 我有客户端和服务器程序,现在通过TCP进行通信.我正在尝试使用POSIX消息队列(当然,在客户端和服务器位于同一台机器上的情况下).我希望它能提高性能(特别是通过减少延迟).
我已经解决了大部分问题,但我不确定一件事:如何建立"连接".服务器同时接受来自多个客户端的连接,所以我很想模仿TCP连接建立过程,如下所示:
select(2)像TCP一样使用).您可能会看到此方案与常见的TCP方法类似,这并非偶然.但是,我想知道:
请记住,之前我没有使用POSIX消息队列(我之前使用过的是IBM WebSphere MQ,但这有点不同).该平台是Linux.
我有一个线程,我用来定期更新我的Activity中的数据.我创建线程并启动一个looper以使用处理程序postDelay().在我的活动的onDestroy()中,我在我的处理程序上调用removeCallbacks().
我应该打电话handler.getLooper().quit()吗?或者不用担心它,让操作系统处理它?或者它会永远运行,消耗CPU周期?
我需要查看消息队列而不删除它们.只有符合某些条件,我才会继续删除消息队列项.这该怎么做?以下是我所知道的API - 但似乎没有人支持偷看.
mq_close() - 关闭消息队列
mq_getattr() - 获取消息队列的当前属性
mq_notify() - 当队列变为非空时通知调用进程
mq_open() - 打开或创建消息队列
mq_receive() - 从队列接收消息
mq_send() - 将消息放入消息队列中
mq_setattr() - 设置消息队列的标志
mq_unlink() - 取消链接(即删除)消息队列
有没有办法在不删除邮件的情况下查看邮件?
查看JMS队列并获取其中的所有消息的最佳方法是什么?
如何计算队列中的消息数?
谢谢.
因此,在此之后,我决定在专用的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的答案的某些部分现在似乎无关紧要,但它们是针对原始问题的.
我什么时候会使用像ironMQ这样的消息队列?何时我会使用像ironWorker这样的工作处理工作者?
我刚刚开始研究这两个主题,我发现很难区分这两个用途.我理解一个worker或多或少是一个沙盒,它将在app服务器之外的不同环境中运行程序,以增加用户体验.我也理解消息队列很像它的数据库替代方案,其中任务被添加到队列,然后另一个服务器/编程侦听该任务,然后将处理它.然而,虽然我认为我明白他们是什么,但我无法区分何时使用每一个以及为什么.
如果我理解正确,我会使用工作人员完成图像处理等任务.但是为什么我不能为此使用消息队列,更重要的是为什么不呢?当然,我可以在ironMQ中排队一个图像URL,然后再检索并处理它.在我看来,这似乎是一个额外的步骤,所以我会避免这一点.
当工作人员可用时,对于常见任务,消息队列对我来说似乎毫无意义.当然,对于发布评论这样的非密集型任务,我可以让工人这样做吗?
我可能误解了每个工具之间的差异,如果是这样,请让我直截了当.否则,请帮忙.
web-services message-queue background-process ironmq ironworker
我有大约100个GPS设备每10秒定期发送坐标.我的客户想要实时反向地理编码,以便在表格视图中查看他的车辆以及位置.我已经设置了一个队列来保存db中的所有数据包,然后我添加了如下所示的地理编码脚本
使用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)
}
运行队列
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)message-queue ×10
c ×2
linux ×2
php ×2
amqp ×1
android ×1
c# ×1
c++ ×1
com ×1
connection ×1
google-maps ×1
handler ×1
hook ×1
interop ×1
ironmq ×1
ironworker ×1
java ×1
jms ×1
laravel-5 ×1
posix ×1
rabbitmq ×1
sockets ×1
sta ×1
web-services ×1
zeromq ×1