有人在ActiveMQ中使用过消息分组功能吗?
http://activemq.apache.org/message-groups.html
对于我正在研究的项目来说,这将是一个非常有用的功能,但我很好奇这个功能如何扩展和执行.在我们的系统中,我们需要将消息分组为大约3-5条消息,因此我们将在进程运行时不断添加组.在这种情况下,似乎我们最终只是试图存储所有组的内存不足.
我对任何经历/想法/优点/缺点感兴趣.
MassTransit中是否有可以帮助管理队列的内容?
我特意想到错误队列.我看到类似于此的线程,但我不打算用实用程序来管理它,而是在代码中.
场景:
Web客户端 - 将命令作为消息发布到应用程序服务器上的远程队列.
应用程序服务器 - 命令被使用和执行.如果命令在执行期间抛出,则将其置于错误队列中.
Web客户端 - 最终用户可以查看错误队列中的所有命令.他们一次解决一个并将它们重新发布以便再次执行.
前两个很容易.第三个是我现在所处的位置.任何建议都非常感谢.
谢谢,
罗布
我正在开发一个Rails应用程序,客户退款将交给Sweatshop工作人员.如果退款失败(因为我们当时无法联系到付款处理商),我想重新排队.
class RefundWorker < Sweatshop::Worker
def process_refund(job)
if refund
Transaction.find(job[:transaction]).update_attributes(:status => 'completed')
else
sleep 3
RefundWorker.async_process_refund(job) # requeue the job
end
end
Run Code Online (Sandbox Code Playgroud)
有没有比上面更好的方法呢?我还没有在RabbitMQ中找到任何"延迟"功能,这是迄今为止我提出的最佳解决方案.我想在重新排队时避免繁忙的循环.
我正在尝试了解有关apache Qpid如何工作的更多信息,我通过以下官方svn中的示例来实现:
http://svn.apache.org/repos/asf
我在看:
哪个使用此配置/属性文件:
有人可以告诉我配置中的这一行代表什么:
connectionfactory.qpidConnectionfactory = amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672
Run Code Online (Sandbox Code Playgroud)
一世.我假设guest:guest是连接到qpid时使用的凭据
II.我假设localhost和5672应该是hostname:port
我的问题是什么test?代表?是队列的名称还是它的名称?是否可以直接在此amqp url中指定队列名称?
我想将我自己开发的任务队列系统转换为基于Celery的任务队列,但我目前拥有的一个功能让我有些困扰.
现在,我的任务队列操作非常粗糙; 我运行该作业(生成数据并将其上传到另一台服务器),使用Nose日志捕获库中的变量收集日志记录,然后将该任务的日志记录存储为应用程序数据库中的详细结果记录.
我想把它分解为三个任务:
这里真正的踢球者是日志记录集合.现在,使用日志捕获,我在数据生成和上载过程中为每个日志调用提供了一系列日志记录.这些是诊断目的所必需的.鉴于任务甚至不能保证在同一个进程中运行,我不清楚如何在Celery任务队列中完成此任务.
我对这个问题的理想解决方案将是一个简单且理想的微创方法,在前任任务(1,2)中捕获所有日志记录并使其可用于报告任务(3)
我最好还是保持相当粗糙的任务定义,并将所有这些工作放在一个任务中?或者有没有办法传递现有的捕获日志记录,以便在最后收集它?
我有以下boost :: interprocess :: message_queue相关问题.
按照预期,我计划在> = 2个进程之间共享一个消息队列.显然,其中一个可能在消息队列中崩溃.因此,它将保留内部锁,使其他进程无法访问队列.怎么解决这个问题?似乎没有办法解锁使用的内部互斥锁.
有没有办法找出消息队列大小以及每条消息中包含什么项目?是Looper.getMainLoop什么吗?
我正在编写一个用于将消息发布到消息队列(RabbitMQ)的主程序.该程序是用Perl 5编写的,并使用AnyEvent :: RabbitMQ与RabbitMQ进行通信.
以下最小示例(针对我遇到的问题)将在第二个命令上失败,该命令通过相同的通道发送,并显示错误"Channel closed".
use strictures 2;
use AnyEvent::RabbitMQ;
main();
############################################################################
sub main {
_log( debug => 'main' );
my $condvar = AnyEvent->condvar;
my $ar = AnyEvent::RabbitMQ->new;
$ar->load_xml_spec;
_log( debug => 'Connecting to RabbitMQ...' );
$ar->connect(
host => 'localhost',
port => 5672,
user => 'guest',
pass => 'guest',
vhost => '/',
timeout => 1,
tls => 0,
on_success => sub { _on_connect_success( $condvar, $ar, @_ ) },
on_failure => sub { _error( …Run Code Online (Sandbox Code Playgroud) 根据文档,/proc/sys/fs/mqueue/msg_max可以使用以增加队列中消息的限制.文档还说,限制不应超过HARD_MSGMAX,这是65,536自Linux 3.5以来.
但是,即使使用500个元素尝试打开队列也会失败EMFILE:
#include <stdio.h>
#include <mqueue.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <sys/stat.h>
int main(int argc, char** argv)
{
int message_size = argc > 1 ? atoi(argv[1]) : 16;
int queue_size = argc > 2 ? atoi(argv[2]) : 10000;
printf("Trying to open queue with msgsize: %d, and maxmsg: %d\n", message_size, queue_size);
struct mq_attr initial_attributes = (struct mq_attr){
.mq_msgsize = message_size,
.mq_maxmsg = queue_size
};
int open_flags …Run Code Online (Sandbox Code Playgroud) 我想设置一个Recoverable属性表单消息,我发送给MSMQ.我一直在搜索一些资源如何在PHP中执行此操作,但我没有找到任何.我试过这个
if(!$msgOut = new COM("MSMQ.MSMQMessage")){
return false;
}
$msgOut->Body = $this->getBody();
$msgOut->Label = $this->getLabel();
$msgOut->Recoverable = true;
$msgOut->Send($msgQueue);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我也尝试将布尔值设置为字符串值和整数,但没有一个工作.当我尝试$msgOut->Recoverable = "true";或$msgOut->Recoverable = true;我得到com_exception
无法查找"可恢复":未知名称.