-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
[Messenger] Add a "in-memory://" transport #29097
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Except these stylish details to be changed, looks good to me 👍
52f0a2c
to
09512a5
Compare
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As we accumulate envelopes over time, do we need to implement ResetableInterface
to flush the envelopes from one request to the next?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But it's not just a blackhole ( |
@GaryPEGEOT can you implement the |
1ade719
to
1711e48
Compare
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 <garypegeot@gmail.com> | ||
*/ | ||
class NullTransport implements TransportInterface, ResetInterface |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 <garypegeot@gmail.com> | ||
*/ | ||
class NullTransportFactoryTest extends \PHPUnit\Framework\TestCase |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe worth importing TestCase?
use PHPUnit\Framework\TestCase;
I agree with @ogizanagi that I would not expect a |
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 👍 |
53de888
to
38e1b51
Compare
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
c1b34d7
to
83267d2
Compare
83267d2
to
8e01179
Compare
8e01179
to
8f8c82e
Compare
use Symfony\Contracts\Service\ResetInterface; | ||
|
||
/** | ||
* Transport that stay in memory. Useful for testing purpose. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
stays
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
src/Symfony/Component/Messenger/Tests/Transport/InMemoryTransportFactoryTest.php
Show resolved
Hide resolved
src/Symfony/Component/Messenger/Tests/Transport/InMemoryTransportTest.php
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you
#eu-fossa
Add a new
InMemoryTransport
for test purpose, usable by starting your DSN byin-memory://