You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/guides/v2.3/extension-dev-guide/message-queues/refresh-config.md
+74-3
Original file line number
Diff line number
Diff line change
@@ -6,10 +6,81 @@ functional_areas:
6
6
- System
7
7
---
8
8
9
-
When Magento is launched, the store's configuration is loaded and copied into memory. Magento uses that copy in memory for queue message transactions. When the store's configuration is updated in the admin, the copy in memory does not automatically refresh, resulting in an outdated in-memory object state.
9
+
When Magento is launched, the store's configuration is loaded into memory. Magento uses the in-memory configuration for queue message transactions. When the store's configuration is updated in the admin, the copy in memory does not refresh automatically, resulting in an outdated in-memory object state.
10
10
11
-
To ensure the copy in memory is re-instantiated after an update, use the `PoisonPill` interface available in the MessageQueue module. Before a new message is processed, the implementation of the `PoisonPillCompareInterface` compares the version of the in-memory copy to the latest in the database. If the versions are different, the in-memory copy is destroyed and a new copy is created when the next `cron:run` job executes.
11
+
To ensure the copy in memory is re-instantiated after an update, use the `PoisonPill` interfaces available in the MessageQueue module.
12
+
There are three type of the `PoisonPill` interfaces:
12
13
13
-
In addition to changes in the configuration, a new store view or a new website also trigger the `PoisonPill` interface.
14
+
*. `Magento\Framework\MessageQueue\PoisonPill\PoisonPillPutInterface` - The interface contains the `put` method. An implementation of the method puts a new version of poison pill inside the database.
15
+
*. `Magento\Framework\MessageQueue\PoisonPill\PoisonPillReadInterface` - The interface contains the `getLatestVersion` method. An implementation of the method gets and returns get latest version of the poison pill.
16
+
*. `Magento\Framework\MessageQueue\PoisonPill\PoisonPillCompareInterface` - The interface contains the `isLatestVersion` method. An implementation of the method checks if the version of current poison pill is the latest.
17
+
18
+
Before a new message is processed, the `PoisonPillCompareInterface` compares the version of the in-memory copy to the latest in the database. If the versions are different, the in-memory copy is destroyed and a new copy is created when the next `cron:run` job executes.
19
+
20
+
In addition to changes in the configuration, a new store view or a new website can also trigger the `PoisonPill` interface.
14
21
15
22
If `PoisonPill` determines the copy of the in-memory state needs to be re-instantiated and you have set up a `consumers_runner` cron job, Magento will automatically restart all consumers on the next run of the job. If you did not set up the cron job, you will need to manually restart any consumers that were terminated by `PoisonPill`.
23
+
24
+
### How to use `PoisonPill` interfaces in Magento {#how-to-use}
25
+
26
+
The method `put` of `PoisonPillPutInterface` using in the `Magento\Store\Model\Website`
27
+
28
+
```php
29
+
/**
30
+
* Clear configuration cache after creation website
31
+
* @return $this
32
+
* @since 100.2.0
33
+
*/
34
+
public function afterSave()
35
+
{
36
+
...
37
+
$this->pillPut->put();
38
+
return parent::afterSave();
39
+
}
40
+
```
41
+
42
+
The method `getLatestVersion` of `PoisonPillReadInterface` using in the `Magento\Framework\MessageQueue\CallbackInvoker`:
43
+
44
+
```php
45
+
/**
46
+
* Run short running process
47
+
* @param QueueInterface $queue
48
+
* @param int $maxNumberOfMessages
49
+
* @param \Closure $callback
50
+
* @return void
51
+
*/
52
+
public function invoke(QueueInterface $queue, $maxNumberOfMessages, $callback)
0 commit comments