在消费者获得消息之后,消费者/工作者进行一些验证然后调用Web服务.在此阶段,如果发生任何错误或验证失败,我们希望将消息放回最初使用的队列.
我读过RabbitMQ文档.但我对reject,nack和cancel方法之间的区别感到困惑.
我在RabbitMQ文档中找不到安装附带的默认x-message-ttl值.
我知道如何将其设置为所需的值,但我很想知道默认值.
我创建了一个简单的发布者和使用者在队列上订阅的消费者basic.consume
.
我的消费者在作业无异常运行时确认消息.每当我遇到异常时,我都不会收到消息并提前返回.只有已确认的消息才会从队列中消失,因此工作正常.
现在我希望消费者再次接收失败的消息,但重新生成这些消息的唯一方法是重新启动消费者.
我该如何处理这个用例?
设置代码
$channel = new AMQPChannel($connection);
$exchange = new AMQPExchange($channel);
$exchange->setName('my-exchange');
$exchange->setType('fanout');
$exchange->declare();
$queue = new AMQPQueue($channel);
$queue->setName('my-queue');
$queue->declare();
$queue->bind('my-exchange');
Run Code Online (Sandbox Code Playgroud)
消费者代码
$queue->consume(array($this, 'callback'));
public function callback(AMQPEnvelope $msg)
{
try {
//Do some business logic
} catch (Exception $ex) {
//Log exception
return;
}
return $queue->ack($msg->getDeliveryTag());
}
Run Code Online (Sandbox Code Playgroud)
制片人代码
$exchange->publish('message');
Run Code Online (Sandbox Code Playgroud) 任何人都可以举例说明生产中如何使用相关ID?
我已经读过它用于请求/响应类型的消息,但我不明白我会在哪里使用它?
我可以想到的一个例子(可能是错误的)是在发布订阅场景中,我可以有5个订阅者,如果我得到5个具有相同关联ID的回复,那么我可以说我的所有订阅者都收到了它.不确定这是否正确使用它.
或者如果我发送一条简单的消息,我可以使用相关性来保证客户端收到它.
还有其他例子吗?
虽然使用ampq或xmpp(rabbitmq或ejabbered,可能有couchdb作为后端)似乎非常适合在社交游戏平台上提供关于朋友状态的实时更新,其中更新很小但频繁,我不禁想到为什么不会榻榻米是一个提供此类更新的好平台吗?
我能想到的主要优势是能够根据朋友和更改api的可用性来过滤更新,这使得开发这样的应用程序并管理它(包括复制)相比,与ampq或xmpp相比,你必须考虑如何管理pubsub节点以及在任何时间点订阅它们的人.
但是,我不禁想到这太好了,我无法找到有关couchdb缺点的信息.不知何故,感觉就像使用MySQL进行消息传递一样,这就是为什么我对使用它犹豫不决.
任何人都有使用couchdb这样的应用程序的经验?你会推荐另一个平台吗?
我正在使用芹菜进行分布式任务处理.我想在web主机上部署我的工作,只是为了展示我的项目的工作.那么我如何让djcelery使用数据库(sqlalchemy)作为django而不是rabbitmq或其他amqp服务器的后端.
我们在android中实现了rabbitmq聊天.但是rabbitmq的java客户端是耗电的.对于android聊天,是不是很好用?我们使用直接交换个人队列的人和个人路由键.在rabbitmq中进行一对一聊天的最佳设计模式是什么?以及减少电池使用的方法
当使用RabbitMQ作为Message Broker时,我有一个场景,其中多个并发使用者使用basic.get AMQP方法从队列中提取消息,并使用显式确认来从队列中删除消息.假设以下设置
Q具有消息M1,M2,M3并且消费者C1,C2和C3(每个都具有其自己的连接和信道)连接到它.
如何在basic.get方法中处理并发?对basic.get方法的调用是否同步处理每个使用自己的连接和通道的并发消费者?C1,C2和C3发出basic.get调用以同时接收消息(假设服务器同时接收所有3个请求).
C1使用basic.get请求消息并获取M1.当C2请求消息时,由于它使用不同的连接,它是否再次获得M1?
消费者如何以预定义的大小批量提取消息?
RabbitMQ 有什么方法可以让多个消费者从同一个队列获取相同的消息吗?
我需要向任何正在收听的人发送同样的信息,但也要确保有人处理它。基本上,我需要交换器的扇出功能与队列的basic.ack功能相结合。有什么方法可以以可扩展的方式实现这一点吗?
我正在考虑使用 RabbitMQ 或 ActiveMQ 等产品。我看到在某种程度上,这些产品对 AMQP v1.0 提供了一定程度的支持。
但是,我正在努力寻找将 AMQP 1.0 与 .NET 结合使用的客户端。到目前为止,我遇到的唯一一个是 Apache Qpid。但是,必须安装其所有依赖项并构建它,而不是仅使用 NuGet 之类的东西来获取客户端库,这似乎有点麻烦,并且不会让我有信心继续支持。
Microsoft Azure 服务总线支持 AMQP 1.0 并有一个客户端,但据我所知,它似乎特定于该产品,这很遗憾,因为我认为 AMQP 的一个好处是可以轻松切换不同的代理。
从我在 RabbitMQ 上读到的内容来看,他们似乎没有承诺为 AMQP 1.0 构建客户端。
有没有人对以上有任何想法,是否有任何我忽略的客户?
提前谢谢了