{"id":745,"library":"amqp","title":"AMQP Low-Level Client","description":"amqp is a low-level AMQP client library for Python, maintained by the Celery project. It is a modern fork of the `amqplib` library, providing essential functionality for interacting with AMQP brokers like RabbitMQ. The library supports AMQP 0-9-1 and is actively maintained, with regular releases (current version 5.3.1) and support for recent Python versions (>=3.6). It's often used in scenarios requiring fine-grained control over AMQP messaging.","status":"active","version":"5.3.1","language":"python","source_language":"en","source_url":"http://github.com/celery/py-amqp","tags":["amqp","messaging","message-queue","celery","rabbitmq","low-level"],"install":[{"cmd":"pip install amqp","lang":"bash","label":"Install stable version"}],"dependencies":[{"reason":"Requires Python 3.6 or higher for current versions.","package":"python","optional":false}],"imports":[{"symbol":"Connection","correct":"from amqp import Connection"},{"symbol":"Channel","correct":"from amqp import Channel"},{"symbol":"BasicMessage","correct":"from amqp import BasicMessage"},{"note":"Exceptions were renamed in recent major versions for idiomatic Python names (e.g., AMQPException -> AMQPError).","wrong":"from amqp import AMQPException","symbol":"AMQPError","correct":"from amqp.exceptions import AMQPError"}],"quickstart":{"code":"import os\nfrom amqp import Connection, BasicMessage\nimport time\n\n# Replace with your AMQP broker URL (e.g., 'amqp://guest:guest@localhost:5672/')\nAMQP_URL = os.environ.get('AMQP_BROKER_URL', 'amqp://guest:guest@localhost:5672/')\nQUEUE_NAME = 'my_test_queue'\n\ndef publish_message(body, connection_url):\n    with Connection(connection_url) as connection:\n        channel = connection.channel()\n        channel.queue_declare(queue=QUEUE_NAME, durable=True)\n        message = BasicMessage(body=body.encode('utf-8'))\n        channel.basic_publish(message, routing_key=QUEUE_NAME)\n        print(f\"[x] Sent '{body}'\")\n\ndef consume_message(connection_url):\n    with Connection(connection_url) as connection:\n        channel = connection.channel()\n        channel.queue_declare(queue=QUEUE_NAME, durable=True)\n\n        def callback(message):\n            print(f\"[x] Received '{message.body.decode()}'\")\n            channel.basic_ack(message.delivery_tag)\n\n        channel.basic_consume(queue=QUEUE_NAME, callback=callback)\n        print(f' [*] Waiting for messages on {QUEUE_NAME}. To exit press CTRL+C')\n        try:\n            while True:\n                connection.drain_events() # Crucial for processing events and heartbeats\n        except KeyboardInterrupt:\n            print(\"Exiting consumer.\")\n\nif __name__ == \"__main__\":\n    # Example usage: Publisher\n    print(\"--- Publisher ---\")\n    publish_message(\"Hello, AMQP!\", AMQP_URL)\n    publish_message(\"Another message.\", AMQP_URL)\n\n    # Example usage: Consumer (run in a separate process/thread or after publisher finishes)\n    # For demonstration, we'll wait a bit and then consume\n    print(\"\\n--- Consumer ---\")\n    time.sleep(2) # Give publisher time to send messages\n    consume_message(AMQP_URL)\n","lang":"python","description":"This quickstart demonstrates how to establish a connection, declare a queue, publish a message, and consume a message with acknowledgments. It uses a basic publisher-consumer pattern and highlights the `Connection.drain_events()` method, which is essential for processing incoming messages and handling heartbeats. The AMQP broker URL should be provided via an environment variable `AMQP_BROKER_URL` or default to `amqp://guest:guest@localhost:5672/`."},"warnings":[{"fix":"Review the official `py-amqp` documentation for updated API usage and object structures (e.g., `Connection`, `Channel`, exception types). Pay attention to arguments removed or deprecated (e.g., `Channel.access_request`, `ticket`, `insist`).","message":"amqp is a fork of `amqplib` and introduces significant API differences, including changes in method signatures and the underlying AMQP protocol version (0-9-1 in `amqp` vs. 0-8 in `amqplib`). Projects migrating from `amqplib` will require code changes.","severity":"breaking","affected_versions":"All versions (compared to original amqplib)"},{"fix":"Upgrade your Python environment to 3.8 or higher. Refer to the `py-amqp` changelog for specific Python version compatibility.","message":"Python 3.6 and 3.7 support has been dropped in recent major versions. Ensure your environment meets the `requires_python` specification.","severity":"breaking","affected_versions":"5.1.0+ (dropped 3.6), 5.2.0+ (dropped 3.7)"},{"fix":"Update exception handling blocks to catch the new exception names, typically found under `amqp.exceptions`.","message":"Several core exception classes were renamed for Pythonic consistency (e.g., `AMQPException` became `AMQPError`, `AMQPConnectionException` became `ConnectionError`, `AMQPChannelException` became `ChannelError`).","severity":"breaking","affected_versions":"5.0.0+"},{"fix":"Integrate `connection.drain_events()` into your main loop or call `connection.heartbeat_tick()` at regular intervals to send heartbeat frames and process incoming events.","message":"Long-running connections require explicit heartbeat management. If `Connection.heartbeat_tick(rate=2)` or `Connection.send_heartbeat()` are not called periodically, the connection may silently drop or experience hangs, especially in systems with network intermediaries that terminate idle connections.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Upgrade to `amqp` version 5.0.9 or later to receive the fix for this channel error regression.","message":"A regression in early 5.0.x versions could lead to `CHANNEL_ERROR/ChannelNotOpen` exceptions. This was fixed in a later patch release.","severity":"gotcha","affected_versions":"5.0.0 - 5.0.8"},{"fix":"Remove explicit `frame_max` settings from client code or ensure it's set to at least 8192, preferably 131072, to align with RabbitMQ 4.x defaults and recommendations.","message":"When using RabbitMQ 4.x+, custom `frame_max` values set in client code below 8192 bytes (the new default) may cause connection issues. The recommended approach is to either not override `frame_max` or set it to 131072 bytes (the default server value).","severity":"gotcha","affected_versions":"All versions when connecting to RabbitMQ 4.x+"}],"env_vars":null,"last_verified":"2026-05-19T19:59:59.632Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Install the 'amqp' library using pip: 'pip install amqp'.","cause":"The 'amqp' library is not installed in the Python environment.","error":"ModuleNotFoundError: No module named 'amqp'"},{"fix":"Update the import statement to 'from kombu.connection import Connection' or check the 'kombu' documentation for the correct import path.","cause":"The 'Connection' class has been removed or relocated in recent versions of the 'kombu' library.","error":"ImportError: cannot import name 'Connection' from 'kombu'"},{"fix":"Use an alternative result backend such as 'rpc://' or install a third-party package that provides the 'amqp' backend.","cause":"The 'amqp' backend has been removed from Celery as of version 5.0.","error":"ModuleNotFoundError: No module named 'celery.backends.amqp'"},{"fix":"Modify the 'amqplib' source code to use absolute imports or switch to a maintained fork like 'py-amqp'.","cause":"The 'amqplib' library contains relative imports that fail in certain environments.","error":"ModuleNotFoundError: No module named 'basic_message'"},{"fix":"Upgrade 'kombu' to the latest version and ensure all dependencies are up to date.","cause":"The 'kombu.five' module has been removed in recent versions of 'kombu'.","error":"ModuleNotFoundError: No module named 'kombu.five'"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":"5.3.1","cli_name":"","cli_version":null,"type":"library","homepage":null,"github":"http://github.com/celery/py-amqp","docs":null,"changelog":null,"pypi":"https://pypi.org/project/amqp/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["http-networking","database"],"install_checks":{"last_tested":"2026-05-19","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","installed_version":"5.3.1","pypi_latest":"5.3.1","is_stale":false,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.1,"mem_mb":4,"disk_size":"18.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.09,"mem_mb":4,"disk_size":"18.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":4,"disk_size":"18.2M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.6,"import_time_s":0.06,"mem_mb":4,"disk_size":"19M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.06,"mem_mb":4,"disk_size":"19M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.06,"mem_mb":4,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.17,"mem_mb":4.4,"disk_size":"20.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.16,"mem_mb":4.4,"disk_size":"20.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.18,"mem_mb":4.4,"disk_size":"20.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.6,"import_time_s":0.14,"mem_mb":4.4,"disk_size":"21M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.14,"mem_mb":4.4,"disk_size":"21M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.13,"mem_mb":4.4,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.12,"mem_mb":4.3,"disk_size":"12.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":4.3,"disk_size":"12.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.13,"mem_mb":4.3,"disk_size":"12.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.4,"import_time_s":0.13,"mem_mb":4.3,"disk_size":"13M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.13,"mem_mb":4.3,"disk_size":"13M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.12,"mem_mb":4.3,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.12,"mem_mb":4.8,"disk_size":"11.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":4.8,"disk_size":"11.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.12,"mem_mb":4.8,"disk_size":"11.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.6,"import_time_s":0.13,"mem_mb":4.8,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.13,"mem_mb":4.8,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.13,"mem_mb":4.8,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.1,"mem_mb":3.9,"disk_size":"17.7M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.08,"mem_mb":3.9,"disk_size":"17.7M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":3.9,"disk_size":"17.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.8,"import_time_s":0.07,"mem_mb":3.9,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.07,"mem_mb":3.9,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"amqp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":3.9,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"_links":{"self":"https://checklist.day/api/registry/amqp","v1":"https://checklist.day/v1/registry/amqp","v1_install":"https://checklist.day/v1/registry/amqp/install","v1_imports":"https://checklist.day/v1/registry/amqp/imports","v1_compatibility":"https://checklist.day/v1/registry/amqp/compatibility","v1_quickstart":"https://checklist.day/v1/registry/amqp/quickstart","docs":"https://checklist.day/docs"}}