The 4-Stage Asynchronous Pipeline
To guarantee that large imports, flash sales, and mass attribute updates never degrade customer browsing or checkout performance, the extension strictly decouples change detection from external API communication.
Dual-Layer Change Tracking
Database changelog triggers (Mview) pair with save-commit observers to immediately capture product, category, and CMS updates.
100-Item Chunking
Three dedicated indexers (CMS, Categories, Products) chunk unique positive entity IDs in batches of 100, publishing to AMQP with zero external network wait.
RabbitMQ Queues
Dedicated AMQP message queues safely buffer synchronization workloads without consuming PHP-FPM web worker threads.
Smart Consumers
Background consumers load entities, convert HTML to clean Markdown, enforce 300ms throttling, and handle rate limits gracefully.
Catalog Knowledge Vectorization & Embedding PipelineSub-60ms Retrieval
Once ingested by api.clusterify.ai, catalog Markdown payloads undergo automated Catalog Knowledge Vectorization. Products, configurable variant options, and custom AI attributes are partitioned into semantic fragments and transformed into high-dimensional vector embeddings. These embeddings power our sub-60ms vector search engine, ensuring your Magento chatbot generates grounded, accurate product recommendations with near-zero hallucination.
Unified Short-Circuit Guard (PlanService::canSyncEntity)
To prevent redundant processing and completely eliminate unnecessary database queries or external API calls, all synchronization touchpoints (Indexers, Queue Consumers, Observers, and CLI runners) evaluate a single authoritative guard:
isEnabled). If disabled, returns false immediately.isSyncEnabled). If disabled, returns false immediately.isCmsSyncEnabled, isCategorySyncEnabled, isProductSyncEnabled). If disabled, returns false.getPublicKey, getSecretKey). If missing, returns false.isUrlKnowledgeAllowed), cached for 10 minutes.Entity Lifecycle & State Handling Rules
The synchronization engine handles all lifecycle states automatically, guaranteeing that deleted, disabled, or out-of-stock items never consume URL quotas:
| Lifecycle Event | Trigger Condition | System Action | Clusterify API Call |
|---|---|---|---|
| Item Added | New CMS page, category, or product created & enabled | Extracts metadata, converts HTML to Markdown | upsert(url, content, isEnabled=true) |
| Item Updated | Description, price, stock, or AI knowledge modified | Re-generates Markdown with updated details | upsert(url, updatedContent, isEnabled=true) |
| Item Disabled | Status set to Disabled (status = 2 / is_active = 0) | Detects disabled flag; emits delete action | bulkDelete(urls: [url]) |
| Item Hidden | Product visibility changed to Not Visible Individually | Detects hidden state; emits delete action | bulkDelete(urls: [url]) |
| Item Deleted | Entity completely removed from Magento database | Pre-deletion observer dispatches delete action | bulkDelete(urls: [url]) |
| Out of Stock | in_stock_only = 1 enabled and item goes out of stock | Detects out-of-stock state; purges URL from quota | bulkDelete(urls: [url]) |
Item Added
upsert(url, content, isEnabled=true)Item Updated
upsert(url, updatedContent, isEnabled=true)Item Disabled
bulkDelete(urls: [url])Item Hidden
bulkDelete(urls: [url])Item Deleted
bulkDelete(urls: [url])Out of Stock
bulkDelete(urls: [url])Consumer Execution Workflows
Pending RabbitMQ tasks can be processed across four execution modes to fit any infrastructure:
Runs clusterify_chatbot_sync_process_queue automatically every minute via standard cron.
bin/magento clusterify:chatbot:sync:consume --limit=50 immediately drains tasks and exits cleanly.
Click ⚡ Process Pending Tasks Now on the Admin Status Dashboard for an instant AJAX drain.
Run continuous consumers via bin/magento queue:consumers:start managed by Supervisor or Systemd.
Frequently Asked Questions: RabbitMQ Catalog Sync
Technical answers on indexers, rate-limit throttling, lifecycle actions, and queue workers.
Why does the extension use RabbitMQ instead of direct HTTP calls during product saves?
How do the 3 dedicated indexers chunk catalog entity updates?
clusterify_chatbot_cms, clusterify_chatbot_category, and clusterify_chatbot_product) deduplicate positive entity IDs from Mview changelog tables and publish them to RabbitMQ in manageable batches of 100 messages.How does the built-in 300ms throttling protect our store against API rate limits?
api.clusterify.ai. Combined with network round-trip latency (~200–300ms), this guarantees total throughput remains safely below the 120 req/min API quota, preventing rate limit spikes during bulk catalog indexing.What happens if an HTTP 429 Rate Limit Exceeded is returned by the API?
RateLimitExceededException from the PHP SDK, dynamically parses $e->getRetryAfter(), logs the event, pauses execution, and retries safely without losing queue state or dropping messages.How does the 5-step unified short-circuit guard save database and server resources?
PlanService::canSyncEntity(). It evaluates 4 local checks (master toggle, sync toggle, entity toggle, API keys) before verifying plan eligibility. If disabled or on the Starter plan, it exits with zero database queries and zero network overhead.How does the dedicated AI ChatBot Knowledge attribute get synchronized?
How are canonical URLs generated for products with category prefixes in their storefront paths?
_ignore_category => true on the URL model. This mirrors Magento's native canonical tag generation in the HTML head, stripping all category folder prefixes and ensuring each product has a single authoritative knowledge base URL.How can store operations monitor RabbitMQ queue backlogs in real time?
How can DevOps engineers trigger or drain consumers from the terminal or CI/CD?
bin/magento clusterify:chatbot:sync:run to queue entities, and bin/magento clusterify:chatbot:sync:consume --limit=50 to immediately drain tasks and exit cleanly. Consult our CLI Reference.Does the synchronization engine support Adobe Commerce Content Staging campaigns?
Magento_CatalogStaging and Magento_CmsStaging. Active staged versions are resolved via MetadataPool. Learn more in our Cloud Compatibility Guide.