Comments (8)
Thanks @michaelklishin, I will make a release of the plugin once RMQ 3.12.0 will be out.
from rabbitmq-message-deduplication.
Hello,
this is not providing the full picture. How is the consumer reading the messages? Is the consumer, for example, acknowledging the message once consumed?
Please provide a working example which reproduces the issue.
from rabbitmq-message-deduplication.
The consumer side :
import pika, sys, os
def main():
credentials = pika.PlainCredentials('guest', 'guest')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost',
5672,
'/',
credentials,
client_properties={
'connection_name': 'sub_dedup',
},
))
channel = connection.channel()
args = {
'x-message-deduplication': True
}
channel.queue_declare(queue='refresh_all', arguments=args)
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
channel.basic_consume(queue='refresh_all', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print('Interrupted')
try:
sys.exit(0)
except SystemExit:
os._exit(0)
from rabbitmq-message-deduplication.
There is indeed something odd with the above code.
When I read the message using Elixir/Erlang client, I get the expected behavior. Same applies if I fetch the message via RabbitMQ Management WebUI. But with the Python pika
client the message seems to be deduplicated forever even if gone from the queue.
I will investigate this further.
from rabbitmq-message-deduplication.
I now have a better understanding of the problem.
The issue presents when a consumer is attached to an empty queue with auto_ack
enabled. When such scenario presents, the internal queue discard
callback is called instead of the expected publish_delivered
[1].
Issue with this, is we do not receive the message as parameter of the discard
callback but just its Id. This is not enough to retrieve the x-deduplication-header
and remove it from the cache.
Hence, the observed behaviour: the first message goes through, all subsequent ones are deemed duplicates as the original header is not removed from the cache.
This issue does not present, if auto_ack
is disabled.
from rabbitmq-message-deduplication.
The above internal API change contributed by @noxdafox will ship starting with RabbitMQ 3.12.0.
from rabbitmq-message-deduplication.
rabbitmq/rabbitmq-server#7802 was reverted because it is not rolling upgrade-safe without a feature flag.
from rabbitmq-message-deduplication.
Using a feature flag on the hot path has risks. Perhaps the PR should be adjusted so that all modules support both message IDs and message records, and backported to 3.11.x
.
Then, at some point, we can pass the entire message record along. For now, the plugin would have to require manual acknowledgements (which is almost always a good idea).
from rabbitmq-message-deduplication.
Related Issues (20)
- Queue level message deduplication failed sometimes. HOT 1
- Server crash HOT 2
- Support for quorums? HOT 1
- Deduplication doesn't consider the unack messages in the queue HOT 2
- Are there anyway for duplicated message to be dead letter upon published? [Question]
- Celery lost connection to broker HOT 1
- Queue crashes when is created with x-message-deduplication=true parameter on RabbitMQ 3.13.0, Plugin version 0.6.2 HOT 6
- 0.5.3 queues not working under rabbitmq 3.10.0 HOT 3
- Auto generate deduplication checksum base on payload or configurable properties
- 0.5.3 queues not working under rabbitmq 3.8.17 HOT 1
- Can key be removed from cache, after BasicAck and some time has ellapsed? HOT 3
- {:plugins_not_found, [:rabbitmq_message_deduplication]} HOT 2
- Policies support HOT 4
- Bug - when the rabbitmq is restarted the messages in a persistent queue are not deduplicated HOT 2
- Exchange level doesn't work but queue level does. What's differrence on using these two?
- Queue crashed with reason timeout to call RabbitMQMessageDeduplication.CacheManager HOT 7
- `x-cache-size` seems to be manadatory, not optional. HOT 1
- Exchange info crash after upgrade to 0.6.0 HOT 5
- Debugging exchanges HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rabbitmq-message-deduplication.