[Messenger] Add a "in-memory://" transport#29097
[Messenger] Add a "in-memory://" transport#29097fabpot merged 2 commits intosymfony:masterfrom GaryPEGEOT:feature/null-transporter
Conversation
|
Just a random thought: Isn't a null transport just a special case of a memory transport without any listener? |
|
Note regarding #29097 (comment): that would mean making the MemoryTransport |
src/Symfony/Component/Messenger/Tests/Transport/NullTransportFactoryTest.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Tests/Transport/NullTransportFactoryTest.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Tests/Transport/NullTransportFactoryTest.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Tests/Transport/NullTransportFactoryTest.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Tests/Transport/NullTransportFactoryTest.php
Outdated
Show resolved
Hide resolved
|
@GaryPEGEOT thanks for this contribution! If this is finally merged, please review the list of Messenger issues and list of pending Messenger pull requests to see if there are issues/PRs conflicting with this change. If there are not, please open an issue in https://github.com/symfony/symfony-docs/issues to track this change. You don't have to provide the docs yourself if you don't want, but this would help us track the change. Thanks! |
sroze
left a comment
There was a problem hiding this comment.
Except these stylish details to be changed, looks good to me 👍
If you never flush your MemoryTransport, it would leak memory. So using it instead of a NullTransport looks wrong (having to flush something when you expect it to be a blackhole is not intuitive) |
| */ | ||
| public function send(Envelope $envelope): Envelope | ||
| { | ||
| $this->sent[] = $envelope; |
There was a problem hiding this comment.
As we accumulate envelopes over time, do we need to implement ResetableInterface to flush the envelopes from one request to the next?
But it's not just a blackhole ( |
|
@GaryPEGEOT can you implement the |
|
Indeed, it would make sense.
…On Sat, 23 Mar 2019 at 22:48, Gary PEGEOT ***@***.***> wrote:
***@***.**** commented on this pull request.
------------------------------
In src/Symfony/Component/Messenger/Transport/NullTransport.php
<#29097 (comment)>:
> + }
+
+ /**
+ * ***@***.***}
+ */
+ public function stop(): void
+ {
+ $this->stopped = true;
+ }
+
+ /**
+ * ***@***.***}
+ */
+ public function send(Envelope $envelope): Envelope
+ {
+ $this->sent[] = $envelope;
@sroze <https://github.com/sroze>, @fabpot <https://github.com/fabpot>
I've implemented Symfony\Contracts\Service\ResetInterface and I now see
that there is an ack an reject method in the Transport interface. Do you
think we need to store which message has been ack / nack?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#29097 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AAxHEZUH-p7C_wteK6h840k5Nr_c8SPSks5vZkzOgaJpZM4YOsl_>
.
|
|
@sroze I added the |
| * | ||
| * @author Gary PEGEOT <[email protected]> | ||
| */ | ||
| class NullTransport implements TransportInterface, ResetInterface |
There was a problem hiding this comment.
Note implementing ResetInterface isn't enough for this to be properly integrated with the framework and stored envelopes to be cleared from one request to the next. The service definition must be tagged with kernel.reset.
But as the service is built using a factory and might use an env var for the DSN, it may not be possible to add the tag conditionally from the extension (compile time). Instead, you could implement ResetInterface on the factory too and keep track of created services to clear them from here (so only the factory will be tagged with kernel.reset).
| * | ||
| * @author Gary PEGEOT <[email protected]> | ||
| */ | ||
| class NullTransportFactoryTest extends \PHPUnit\Framework\TestCase |
There was a problem hiding this comment.
maybe worth importing TestCase?
use PHPUnit\Framework\TestCase;
|
I agree with @ogizanagi that I would not expect a |
|
|
|
Well, we also have #28746, which is a "memory" transport where the messages are sent on |
|
I agree it should be the same implementation. Though... it could actually be two DSNs |
|
Should it be a black-hole and do nothing at all (no storing nor receiving of message) to avoid duplication with memory listener? |
What do you mean? 🤔 |
memory transport, my bad!, both this transport and the one in #28746 store message in memory, so are kind of duplicate. Should this one do nothing instead, ie not storing any message? |
|
I think the idea is this: This one SHOULD store in memory, and be called |
|
Exactly 👍 |
Renamed to |
src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Transport/InMemoryTransport.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Transport/InMemoryTransport.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Transport/InMemoryTransport.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Transport/InMemoryTransport.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Transport/InMemoryTransport.php
Outdated
Show resolved
Hide resolved
| use Symfony\Contracts\Service\ResetInterface; | ||
|
|
||
| /** | ||
| * Transport that stay in memory. Useful for testing purpose. |
|
Thank you @GaryPEGEOT. |
…, sroze) This PR was merged into the 4.3-dev branch. Discussion ---------- [Messenger] Add a "in-memory://" transport | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #29040 | License | MIT | Doc PR | Todo Add a new `InMemoryTransport` for test purpose, usable by starting your DSN by `in-memory://` Commits ------- 8f8c82e Make the in-memory transport resettable fe75920 Add a "null://" transport
Add a new
InMemoryTransportfor test purpose, usable by starting your DSN byin-memory://