Php RabbitMq:替换重复的消息
我正在使用RabbitMq为注册的web挂钩提交数据 基本信息: 如果在系统中创建了联系人,则消息将放入队列中,并且消费者稍后将钩子数据发送到注册的url 对我的问题: 一个联系人可能在5秒内更新两次,并且两条消息仍在队列中。 但我希望,如果第二条消息排队,第一条消息将被删除 我知道我不能手动删除邮件。但是,是否有可能在消息上设置一个id,并且如果具有相同id的两条消息位于同一队列中,则第一条消息会自动删除/替换? 只有一个请求被发送到url。我知道您可以在消息本身上设置消息id。但是我找不到任何东西来代替旧的 我的PHP代码(简化): 顺便说一句,我正在使用php amqplib 谢谢你的帮助Php RabbitMq:替换重复的消息,php,rabbitmq,amqp,php-amqplib,Php,Rabbitmq,Amqp,Php Amqplib,我正在使用RabbitMq为注册的web挂钩提交数据 基本信息: 如果在系统中创建了联系人,则消息将放入队列中,并且消费者稍后将钩子数据发送到注册的url 对我的问题: 一个联系人可能在5秒内更新两次,并且两条消息仍在队列中。 但我希望,如果第二条消息排队,第一条消息将被删除 我知道我不能手动删除邮件。但是,是否有可能在消息上设置一个id,并且如果具有相同id的两条消息位于同一队列中,则第一条消息会自动删除/替换? 只有一个请求被发送到url。我知道您可以在消息本身上设置消息id。但是我找不到任
FloRabbitMQ不会以这种方式删除/过滤消息。您必须在应用程序级别执行此操作,可能需要使用类似bloom筛选器的东西。您可以使用唯一的消息ID标记每条消息。消费应用程序应该保留一个已处理的入站消息ID的优化列表(在线程安全的
HashMap
(Java),或字典
(.NET)实现
如果收到一封已经处理过的邮件(邮件ID位于已处理邮件ID的存储列表中),它将被忽略(或者应该发出礼貌的“请等待”式响应),保留幂等性。我是这么想的。但我不确定。感谢您的帮助
$connection = new AMQPConnection('localhost', 5672, 'test', 'test');
$channel = $connection->channel();
$channel->queue_declare(self::QUEUE_NAME, false, true, false, false);
$data = array(
'model' => get_class($subject),
'id' => $subject->getId(),
'event' => $event->getName()
);
$messageProperties = array(
'message_id' => get_class($subject) . '-' . $subject->getId()
);
$channel->basic_publish(new AMQPMessage(json_encode($data), $messageProperties), '', self::QUEUE_NAME);
$channel->close();
$connection->close();