Comments (3)
Yes this is currently our main design problem. Using callback to process messages from RabbitMQ was not a good choice. We're looking into it to find a better API.
from aioamqp.
Okay, thanks! I could solve this issue for know with opening multiple connection and having multiple channels.
from aioamqp.
Hi, as this isn't moving forward and I'm interested in a solution (for now I'm solving this at application level), I want to propose an API for message consumption. I don't know the code base of the library so I don't know if it is difficult to implement but I think that this API is cleaner and better.
The first thing is the external API, it would be nice to have an async iterator for consuming messages, something like:
consumer = await channel.basic_consume(
queue_name=queue_name,
no_ack=True,
consumer_tag=consumer_tag
)
async for message in consumer:
# do whatever with the message
pass
# message can be a Message object that contains as attributes the tuple of
# "channel, body, envelope, properties" that now is passed to
# the callback or directly return that as a tuple, so it will be
async for channel, body, envelope, properties in consumer:
# do whatever with the message
pass
The consumer returned by channel.basic_consume
should be a Consumer object implementing the async iterator protocol that polls from a asyncio.Queue
that have the messages inside, that queue should be populated by another asyncio.Task
that would be the method that consumes from the RabbitMQ and dispatch the message to the correct asyncio.Queue
.
At the end you have a asyncio.Task
per channel getting messages and dispatching them to queues for consumers so the consumer Task of the library is separated from the Tasks of the user of the library.
I think that most of the changes goes in channel.basic_consume
and channel.basic_deliver
also the channel.consumer_callbacks
attribute should be changed to channel.consumer_queues
I think that if you guys at Polyconseil agree, and is not too difficult to implement, I can implement that.
from aioamqp.
Related Issues (20)
- Cleanup login method HOT 1
- channel.basic_consume API docs HOT 2
- AttributeError: 'Channel' object has no attribute 'basic_ack' HOT 1
- Message Properties: 'type' property HOT 7
- If value passed to 'x-message-ttl' is greater than or equal 128, then invalid Negative value is sending to server HOT 3
- Channel publish requires a lock
- Python3.8
- Init login method default value 'AMQPLAIN' HOT 2
- Testing with pamqp 3.0 HOT 6
- Is there any usage example or tutorial documents HOT 1
- Publishing to a non-existing exchange does not raise errors HOT 1
- Republish the pypi docs to pick up Python3.9 HOT 3
- Support server-generated queue names
- AmazonMQ issues on `queue_declare` HOT 1
- Ready for release on pypi? HOT 1
- Channel.basic_server_ack doesn't respect `multiple` flag HOT 3
- Unable to subscribe to a queue with wildcard (asterisk) HOT 3
- using tag uri scheme for queue and exchange names are not longer possible HOT 1
- No longer handling CancelledError on protocol.run
- from_url does not parse heartbeat query param
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 aioamqp.