Hi team , while running command "console sync:data...
# help
c
Hi team , while running command "console sync:data" i am getting this error ErrorException - Exception: Undefined array key "sync.storage.subscription" in /data/vendor/spryker/rabbit-mq/src/Spryker/Client/RabbitMq/Model/Connection/ConnectionManager.php (82) Command: /data/vendor/bin/console sync:data
p
Heyhey, is the queue with the name “sync.storage.subscription” available?
c
Yes it is available
p
i am missing the full trace - but from my feeling there seems to be something wrong inside
src/Pyz/Client/RabbitMq/RabbitMqConfig.php
regarding the key “sync.storage.subscription”
c
This is full trac #0 /data/vendor/spryker/rabbit-mq/src/Spryker/Client/RabbitMq/Model/Connection/ConnectionManager.php(82): Spryker\Shared\ErrorHandler\ErrorHandlerEnvironment->Spryker\Shared\ErrorHandler\{closure}(2, 'Undefined array...', '/data/vendor/sp...', 82) #1 /data/vendor/spryker/rabbit-mq/src/Spryker/Client/RabbitMq/Model/Publisher/Publisher.php(160): Spryker\Client\RabbitMq\Model\Connection\ConnectionManager->getChannelsByQueuePoolName('sync.storage.su...', NULL) #2 /data/vendor/spryker/rabbit-mq/src/Spryker/Client/RabbitMq/Model/Publisher/Publisher.php(119): Spryker\Client\RabbitMq\Model\Publisher\Publisher->getChannelByQueuePoolName(Object(Generated\Shared\Transfer\QueueSendMessageTransfer)) #3 /data/vendor/spryker/rabbit-mq/src/Spryker/Client/RabbitMq/Model/Publisher/Publisher.php(97): Spryker\Client\RabbitMq\Model\Publisher\Publisher->getChannels(Object(Generated\Shared\Transfer\QueueSendMessageTransfer)) #4 /data/vendor/spryker/rabbit-mq/src/Spryker/Client/RabbitMq/Model/Publisher/Publisher.php(81): Spryker\Client\RabbitMq\Model\Publisher\Publisher->addBatchMessage(Object(Generated\Shared\Transfer\QueueSendMessageTransfer), 'sync.storage.su...') #5 /data/vendor/spryker/rabbit-mq/src/Spryker/Client/RabbitMq/Model/RabbitMqAdapter.php(163): Spryker\Client\RabbitMq\Model\Publisher\Publisher->sendMessages('sync.storage.su...', Array) #6 /data/vendor/spryker/queue/src/Spryker/Client/Queue/Model/Proxy/QueueProxy.php(85): Spryker\Client\RabbitMq\Model\RabbitMqAdapter->sendMessages('sync.storage.su...', Array) #7 /data/vendor/spryker/queue/src/Spryker/Client/Queue/QueueClient.php(61): Spryker\Client\Queue\Model\Proxy\QueueProxy->sendMessages('sync.storage.su...', Array) #8 /data/vendor/spryker/synchronization/src/Spryker/Zed/Synchronization/Dependency/Client/SynchronizationToQueueClientBridge.php(33): Spryker\Client\Queue\QueueClient->sendMessages('sync.storage.su...', Array) #9 /data/vendor/spryker/synchronization/src/Spryker/Zed/Synchronization/Business/Export/QueryContainerExporter.php(139): Spryker\Zed\Synchronization\Dependency\Client\SynchronizationToQueueClientBridge->sendMessages('sync.storage.su...', Array) #10 /data/vendor/spryker/synchronization/src/Spryker/Zed/Synchronization/Business/Export/QueryContainerExporter.php(100): Spryker\Zed\Synchronization\Business\Export\QueryContainerExporter->syncData(Object(Pyz\Zed\SubscriptionStorage\Communication\Plugin\Synchronization\SubscriptionSynchronizationDataPlugin), Array) #11 /data/vendor/spryker/synchronization/src/Spryker/Zed/Synchronization/Business/Export/QueryContainerExporter.php(83): Spryker\Zed\Synchronization\Business\Export\QueryContainerExporter->exportData(Array, Object(Pyz\Zed\SubscriptionStorage\Communication\Plugin\Synchronization\SubscriptionSynchronizationDataPlugin)) #12 /data/vendor/spryker/synchronization/src/Spryker/Zed/Synchronization/Business/Export/ExporterPluginResolver.php(79): Spryker\Zed\Synchronization\Business\Export\QueryContainerExporter->exportSynchronizedData(Array, Array) #13 /data/vendor/spryker/synchronization/src/Spryker/Zed/Synchronization/Business/SynchronizationFacade.php(137): Spryker\Zed\Synchronization\Business\Export\ExporterPluginResolver->executeResolvedPluginsBySourcesWithIds(Array, Array) #14 /data/vendor/spryker/synchronization/src/Spryker/Zed/Synchronization/Communication/Console/ExportSynchronizedDataConsole.php(83): Spryker\Zed\Synchronization\Business\SynchronizationFacade->executeResolvedPluginsBySourcesWithIds(Array, Array) #15 /data/vendor/symfony/console/Command/Command.php(298): Spryker\Zed\Synchronization\Communication\Console\ExportSynchronizedDataConsole->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #16 /data/vendor/symfony/console/Application.php(1058): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #17 /data/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(Spryker\Zed\Synchronization\Communication\Console\ExportSynchronizedDataConsole), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #18 /data/vendor/spryker/console/src/Spryker/Zed/Console/Communication/Bootstrap/ConsoleBootstrap.php(114): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #19 /data/vendor/symfony/console/Application.php(171): Spryker\Zed\Console\Communication\Bootstrap\ConsoleBootstrap->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #20 /data/vendor/spryker/console/bin/console(27): Symfony\Component\Console\Application->run() #21 /data/vendor/bin/console(120): include('/data/vendor/sp...')
sync.png
p
Can you paste the src/Pyz/Client/RabbitMq/RabbitMqConfig.php ?
c
sure
<?php /** * This file is part of the Spryker Commerce OS. * For full license information, please view the LICENSE file that was distributed with this source code. */ namespace Pyz\Client\RabbitMq; use Pyz\Shared\SubscriptionStorage\SubscriptionStorageConfig; use Spryker\Client\RabbitMq\RabbitMqConfig as SprykerRabbitMqConfig; use Spryker\Shared\AssetStorage\AssetStorageConfig; use Spryker\Shared\AvailabilityStorage\AvailabilityStorageConfig; use Spryker\Shared\AvailabilityStorage\AvailabilityStorageConstants; use Spryker\Shared\CategoryPageSearch\CategoryPageSearchConstants; use Spryker\Shared\CategoryStorage\CategoryStorageConstants; use Spryker\Shared\CmsPageSearch\CmsPageSearchConstants; use Spryker\Shared\CmsStorage\CmsStorageConstants; use Spryker\Shared\CompanyUserStorage\CompanyUserStorageConfig; use Spryker\Shared\ConfigurableBundlePageSearch\ConfigurableBundlePageSearchConfig; use Spryker\Shared\ConfigurableBundleStorage\ConfigurableBundleStorageConfig; use Spryker\Shared\ContentStorage\ContentStorageConfig; use Spryker\Shared\CustomerAccessStorage\CustomerAccessStorageConstants; use Spryker\Shared\Event\EventConfig; use Spryker\Shared\Event\EventConstants; use Spryker\Shared\FileManagerStorage\FileManagerStorageConstants; use Spryker\Shared\GlossaryStorage\GlossaryStorageConfig; use Spryker\Shared\Log\LogConstants; use Spryker\Shared\MerchantOpeningHoursStorage\MerchantOpeningHoursStorageConfig; use Spryker\Shared\MerchantSearch\MerchantSearchConfig; use Spryker\Shared\MerchantStorage\MerchantStorageConfig; use Spryker\Shared\PriceProductOfferStorage\PriceProductOfferStorageConfig; use Spryker\Shared\PriceProductStorage\PriceProductStorageConfig; use Spryker\Shared\PriceProductStorage\PriceProductStorageConstants; use Spryker\Shared\ProductConfigurationStorage\ProductConfigurationStorageConfig; use Spryker\Shared\ProductImageStorage\ProductImageStorageConfig; use Spryker\Shared\ProductOfferAvailabilityStorage\ProductOfferAvailabilityStorageConfig; use Spryker\Shared\ProductOfferStorage\ProductOfferStorageConfig; use Spryker\Shared\ProductPackagingUnitStorage\ProductPackagingUnitStorageConfig; use Spryker\Shared\ProductPageSearch\ProductPageSearchConfig; use Spryker\Shared\ProductPageSearch\ProductPageSearchConstants; use Spryker\Shared\ProductStorage\ProductStorageConfig; use Spryker\Shared\ProductStorage\ProductStorageConstants; use Spryker\Shared\PublishAndSynchronizeHealthCheck\PublishAndSynchronizeHealthCheckConfig; use Spryker\Shared\PublishAndSynchronizeHealthCheckSearch\PublishAndSynchronizeHealthCheckSearchConfig; use Spryker\Shared\PublishAndSynchronizeHealthCheckStorage\PublishAndSynchronizeHealthCheckStorageConfig; use Spryker\Shared\Publisher\PublisherConfig; use Spryker\Shared\SalesReturnSearch\SalesReturnSearchConfig; use Spryker\Shared\ShoppingListStorage\ShoppingListStorageConfig; use Spryker\Shared\TaxProductStorage\TaxProductStorageConfig; use Spryker\Shared\TaxStorage\TaxStorageConfig; use Spryker\Shared\UrlStorage\UrlStorageConfig; use Spryker\Shared\UrlStorage\UrlStorageConstants; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class RabbitMqConfig extends SprykerRabbitMqConfig { /** * QueueNameFoo, // Queue => QueueNameFoo, (Queue and error queue will be created: QueueNameFoo and QueueNameFoo.error) * QueueNameBar => [ * RoutingKeyFoo => QueueNameBaz, // (Additional queues can be defined by several routing keys) * ], * * @see https://www.rabbitmq.com/tutorials/amqp-concepts.html * * @return array */ protected function getQueueConfiguration(): array { return array_merge( [ EventConstants::EVENT_QUEUE => [ EventConfig::EVENT_ROUTING_KEY_RETRY => EventConstants::EVENT_QUEUE_RETRY, EventConfig::EVENT_ROUTING_KEY_ERROR => EventConstants::EVENT_QUEUE_ERROR, ], $this->get(LogConstants::LOG_QUEUE_NAME), ], $this->getPyzPublishQueueConfiguration(), $this->getPyzSynchronizationQueueConfiguration(), ); } /** * @return array */ protected function getPyzPublishQueueConfiguration(): array { return [ PublisherConfig::PUBLISH_QUEUE => [ PublisherConfig::PUBLISH_ROUTING_KEY_RETRY => PublisherConfig::PUBLISH_RETRY_QUEUE, PublisherConfig::PUBLISH_ROUTING_KEY_ERROR => PublisherConfig::PUBLISH_ERROR_QUEUE, ], GlossaryStorageConfig::PUBLISH_TRANSLATION, PublishAndSynchronizeHealthCheckConfig::PUBLISH_PUBLISH_AND_SYNCHRONIZE_HEALTH_CHECK, UrlStorageConfig::PUBLISH_URL, AvailabilityStorageConfig::PUBLISH_AVAILABILITY, PriceProductStorageConfig::PUBLISH_PRICE_PRODUCT_ABSTRACT, PriceProductStorageConfig::PUBLISH_PRICE_PRODUCT_CONCRETE, ProductImageStorageConfig::PUBLISH_PRODUCT_ABSTRACT_IMAGE, ProductImageStorageConfig::PUBLISH_PRODUCT_CONCRETE_IMAGE, ProductPageSearchConfig::PUBLISH_PRODUCT_ABSTRACT_PAGE, ProductPageSearchConfig::PUBLISH_PRODUCT_CONCRETE_PAGE, ProductStorageConfig::PUBLISH_PRODUCT_ABSTRACT, ProductStorageConfig::PUBLISH_PRODUCT_CONCRETE, SubscriptionStorageConfig::PRODUCT_ABSTRACT_SUBSCRIPTION_PUBLISH_STORAGE_QUEUE, ]; } /** * @return array */ protected function getPyzSynchronizationQueueConfiguration(): array { return [ PublishAndSynchronizeHealthCheckSearchConfig::SYNC_SEARCH_PUBLISH_AND_SYNCHRONIZE_HEALTH_CHECK, PublishAndSynchronizeHealthCheckStorageConfig::SYNC_STORAGE_PUBLISH_AND_SYNCHRONIZE_HEALTH_CHECK, GlossaryStorageConfig::SYNC_STORAGE_TRANSLATION, UrlStorageConstants::URL_SYNC_STORAGE_QUEUE, AvailabilityStorageConstants::AVAILABILITY_SYNC_STORAGE_QUEUE, CustomerAccessStorageConstants::CUSTOMER_ACCESS_SYNC_STORAGE_QUEUE, CategoryStorageConstants::CATEGORY_SYNC_STORAGE_QUEUE, ProductStorageConstants::PRODUCT_SYNC_STORAGE_QUEUE, PriceProductStorageConstants::PRICE_SYNC_STORAGE_QUEUE, ProductPackagingUnitStorageConfig::PRODUCT_PACKAGING_UNIT_SYNC_STORAGE_QUEUE, ConfigurableBundleStorageConfig::CONFIGURABLE_BUNDLE_SYNC_STORAGE_QUEUE, ConfigurableBundlePageSearchConfig::CONFIGURABLE_BUNDLE_SEARCH_QUEUE, CmsStorageConstants::CMS_SYNC_STORAGE_QUEUE, CategoryPageSearchConstants::CATEGORY_SYNC_SEARCH_QUEUE, CmsPageSearchConstants::CMS_SYNC_SEARCH_QUEUE, ProductPageSearchConstants::PRODUCT_SYNC_SEARCH_QUEUE, FileManagerStorageConstants::FILE_SYNC_STORAGE_QUEUE, ShoppingListStorageConfig::SHOPPING_LIST_SYNC_STORAGE_QUEUE, CompanyUserStorageConfig::COMPANY_USER_SYNC_STORAGE_QUEUE, ContentStorageConfig::CONTENT_SYNC_STORAGE_QUEUE, TaxProductStorageConfig::PRODUCT_ABSTRACT_TAX_SET_SYNC_STORAGE_QUEUE, TaxStorageConfig::TAX_SET_SYNC_STORAGE_QUEUE, SalesReturnSearchConfig::SYNC_SEARCH_RETURN, MerchantStorageConfig::MERCHANT_SYNC_STORAGE_QUEUE, MerchantSearchConfig::SYNC_SEARCH_MERCHANT, PriceProductOfferStorageConfig::PRICE_PRODUCT_OFFER_OFFER_SYNC_STORAGE_QUEUE, MerchantOpeningHoursStorageConfig::MERCHANT_OPENING_HOURS_SYNC_STORAGE_QUEUE, ProductOfferAvailabilityStorageConfig::PRODUCT_OFFER_AVAILABILITY_SYNC_STORAGE_QUEUE, ProductOfferStorageConfig::PRODUCT_OFFER_SYNC_STORAGE_QUEUE, AssetStorageConfig::ASSET_SYNC_STORAGE_QUEUE, ProductConfigurationStorageConfig::PRODUCT_CONFIGURATION_SYNC_STORAGE_QUEUE, SubscriptionStorageConfig::SYNC_STORAGE_SUBSCRIPTION, ]; } /** * @return string */ protected function getDefaultBoundQueueNamePrefix(): string { return 'error'; } }
p
This looks good so far
How does your Synchronization-Plugin for that look like? (the one you added inside the pluginstack in src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php )
c
wait just sharing
<?php /**  * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.  * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.  */ namespace Pyz\Zed\SubscriptionStorage\Communication\Plugin\Synchronization; use Propel\Runtime\ActiveQuery\ModelCriteria; use Pyz\Shared\SubscriptionStorage\SubscriptionStorageConfig; use Spryker\Shared\ProductOptionStorage\ProductOptionStorageConfig; use Spryker\Zed\Kernel\Communication\AbstractPlugin; use Spryker\Zed\SynchronizationExtension\Dependency\Plugin\SynchronizationDataQueryContainerPluginInterface; /**  * @method \Pyz\Zed\SubscriptionStorage\Persistence\SubscriptionStorageQueryContainerInterface getQueryContainer()  * @method \Pyz\Zed\SubscriptionStorage\Business\SubscriptionStorageFacadeInterface getFacade()  * @method \Pyz\Zed\SubscriptionStorage\Communication\SubscriptionStorageCommunicationFactory getFactory()  * @method \Pyz\Zed\SubscriptionStorage\SubscriptionStorageConfig getConfig()  */ class SubscriptionSynchronizationDataPlugin extends AbstractPlugin implements SynchronizationDataQueryContainerPluginInterface {     /**      * {@inheritDoc}      *      * @api      *      * @return string      */     public function getResourceName(): string     {         return SubscriptionStorageConfig::PRODUCT_ABSTRACT_SUBSCRIPTION_RESOURCE_NAME;     }     /**      * {@inheritDoc}      *      * @api      *      * @return bool      */     public function hasStore(): bool     {         return false;     }     /**      * {@inheritDoc}      *      * @api      *      * @param array<int> $ids      *      * @return \Propel\Runtime\ActiveQuery\ModelCriteria|null      */     public function queryData($ids = []): ?ModelCriteria     {         $query = $this->getQueryContainer()->queryProductAbstractSubscriptionStorageByIds($ids);         if ($ids === []) {             $query->clear();         }         return $query->orderByIdProductAbstractSubscriptionStorage();     }     /**      * {@inheritDoc}      *      * @api      *      * @return array      */     public function getParams(): array     {         return [];     }     /**      * {@inheritDoc}      *      * @api      *      * @return string      */     public function getQueueName(): string     {         return SubscriptionStorageConfig::SYNC_STORAGE_SUBSCRIPTION;     }     /**      * {@inheritDoc}      *      * @api      *      * @return string|null      */     public function getSynchronizationQueuePoolName(): ?string     {         return $this->getFactory()->getConfig()->getProductAbstractOptionSynchronizationPoolName();     } }
p
What about the part
Copy code
public function getSynchronizationQueuePoolName(): ?string
    {
        return $this->getFactory()->getConfig()->getProductAbstractOptionSynchronizationPoolName();
    }
? When I look at the trace it could be sth with that as well
#1 /data/vendor/spryker/rabbit-mq/src/Spryker/Client/RabbitMq/Model/Publisher/Publisher.php(160): Spryker\Client\RabbitMq\Model\Connection\ConnectionManager->getChannelsByQueuePoolName(‘sync.storage.su...’, NULL)
c
public function getProductAbstractOptionSynchronizationPoolName(): ?string { return 'sync.storage.subscription'; }
it want queue pool name if i return null from here
so it give error
p
look at src/Pyz/Zed/ProductConfigurationStorage/ProductConfigurationStorageConfig.php It seems that this should be named like synchronizationPool
👍 2
c
Thank you so much its work
💪 1