import asyncio
from ri import (
RiQueueModule,
RiQueueConfig,
RiQueueManager,
RiQueueMessage,
RiQueueStats,
RiQueueBackendType,
RiRetryPolicy,
RiDeadLetterConfig,
)
async def main():
config = RiQueueConfig()
config.backend_type = RiQueueBackendType.MEMORY
config.max_queue_size = 10000
config.default_ttl_seconds = 3600
config.enable_dead_letter = True
config.enable_priority = True
retry_policy = RiRetryPolicy()
retry_policy.max_retries = 3
retry_policy.retry_delay_seconds = 5.0
retry_policy.exponential_backoff = True
config.retry_policy = retry_policy
dlq_config = RiDeadLetterConfig()
dlq_config.max_retries = 5
dlq_config.ttl_seconds = 86400
config.dead_letter_config = dlq_config
queue_module = RiQueueModule(config)
manager = RiQueueManager()
orders = manager.create_queue("orders")
notifications = manager.create_queue("notifications")
events = manager.create_queue("events")
order_msg = RiQueueMessage()
order_msg.payload = b'{"order_id": "12345", "amount": 99.99}'
order_msg.priority = 10
order_msg.headers = {"content-type": "application/json"}
notification_msg = RiQueueMessage()
notification_msg.payload = b'{"type": "email", "to": "user@example.com"}'
notification_msg.priority = 5
event_msg = RiQueueMessage()
event_msg.payload = b'{"event": "user_login", "user_id": "user123"}'
event_msg.priority = 1
print("Publishing messages to queues...")
orders.publish(order_msg)
notifications.publish(notification_msg)
events.publish(event_msg)
print("\nConsuming messages...")
consumed_order = orders.consume(timeout_seconds=5.0)
if consumed_order:
print(f"Consumed order: {consumed_order.payload}")
consumed_notification = notifications.consume(auto_ack=True)
if consumed_notification:
print(f"Consumed notification: {consumed_notification.payload}")
peeked_event = events.peek()
if peeked_event:
print(f"Peeked event: {peeked_event.payload}")
print("\nQueue Statistics:")
orders_stats = manager.get_queue_stats("orders")
print(f"Orders queue - Size: {orders_stats.message_count}, Consumers: {orders_stats.consumer_count}")
notifications_stats = manager.get_queue_stats("notifications")
print(f"Notifications queue - Size: {notifications_stats.message_count}")
events_stats = manager.get_queue_stats("events")
print(f"Events queue - Size: {events_stats.message_count}")
print("\nAll queues:")
all_queues = manager.list_queues()
for queue_name in all_queues:
print(f" - {queue_name}")
print("\nDeleting events queue...")
manager.delete_queue("events")
print("\nQueue operations completed successfully!")
if __name__ == "__main__":
asyncio.run(main())