diff --git a/.env b/.env index 8a405ee4a8211bd0f68e3207117c88b36ddc4405..c6e4ae85cfb09973b6f7b9922ee5c9244dbff9af 100644 --- a/.env +++ b/.env @@ -36,3 +36,10 @@ LOCK_DSN=semaphore ###> symfony/mailer ### MAILER_DSN=smtp://127.0.0.1:1025 ###< symfony/mailer ### + +###> symfony/messenger ### +# Choose one of the transports below +# MESSENGER_TRANSPORT_DSN=doctrine://default +# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages +# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages +###< symfony/messenger ### diff --git a/composer.json b/composer.json index 1cb4d2bcaa75393253e3491a7a38e1d2acb53082..b5724c243407f2c950c8055659df77a77d29cec6 100644 --- a/composer.json +++ b/composer.json @@ -24,6 +24,7 @@ "symfony/flex": "^1.3.1", "symfony/framework-bundle": "5.3.*", "symfony/mailer": "5.3.*", + "symfony/messenger": "5.3.*", "symfony/mime": "5.3.*", "symfony/proxy-manager-bridge": "5.3.*", "symfony/rate-limiter": "5.3.*", diff --git a/composer.lock b/composer.lock index 08a32d36c396c31e69e208dd0e83b709da7deb88..405b15a8c9fe6066e33c083ce0d7018e7e562e52 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "15f43f40b7427a91aa25d3687fb76654", + "content-hash": "302e93848739db6c65cce97b06bcc20f", "packages": [ { "name": "composer/package-versions-deprecated", @@ -2718,6 +2718,81 @@ }, "time": "2021-05-31T10:40:46+00:00" }, + { + "name": "symfony/amqp-messenger", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/amqp-messenger.git", + "reference": "7444d23daba4551f550d4a19c4d10c6eefa87615" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/7444d23daba4551f550d4a19c4d10c6eefa87615", + "reference": "7444d23daba4551f550d4a19c4d10c6eefa87615", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/messenger": "^5.3" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Amqp\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony AMQP extension Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/amqp-messenger/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T12:40:44+00:00" + }, { "name": "symfony/asset", "version": "v5.3.2", @@ -3459,6 +3534,85 @@ ], "time": "2021-06-01T15:43:02+00:00" }, + { + "name": "symfony/doctrine-messenger", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-messenger.git", + "reference": "f67e8f9f7d0e14d079c655c4c51440c388238e76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/f67e8f9f7d0e14d079c655c4c51440c388238e76", + "reference": "f67e8f9f7d0e14d079c655c4c51440c388238e76", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/messenger": "^5.1", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/dbal": "<2.10", + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/dbal": "^2.10|^3.0", + "doctrine/persistence": "^1.3|^2", + "symfony/property-access": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Doctrine Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-messenger/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:47:41+00:00" + }, { "name": "symfony/dotenv", "version": "v5.3.0", @@ -4904,6 +5058,102 @@ ], "time": "2021-06-24T08:13:00+00:00" }, + { + "name": "symfony/messenger", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "1500e5be63724f90fb9fb55f78ebfb46b3305ede" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/1500e5be63724f90fb9fb55f78ebfb46b3305ede", + "reference": "1500e5be63724f90fb9fb55f78ebfb46b3305ede", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/amqp-messenger": "^5.1", + "symfony/deprecation-contracts": "^2.1", + "symfony/doctrine-messenger": "^5.1", + "symfony/polyfill-php80": "^1.16", + "symfony/redis-messenger": "^5.1" + }, + "conflict": { + "symfony/event-dispatcher": "<4.4", + "symfony/framework-bundle": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/serializer": "<5.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/serializer": "^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0" + }, + "suggest": { + "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps applications send and receive messages to/from other applications or via message queues", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T13:21:39+00:00" + }, { "name": "symfony/mime", "version": "v5.3.2", @@ -6340,6 +6590,79 @@ ], "time": "2021-05-26T17:43:10+00:00" }, + { + "name": "symfony/redis-messenger", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/redis-messenger.git", + "reference": "1eed27264bc2b965c37460bb2e36b602ed6ba694" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/1eed27264bc2b965c37460bb2e36b602ed6ba694", + "reference": "1eed27264bc2b965c37460bb2e36b602ed6ba694", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/messenger": "^5.1" + }, + "require-dev": { + "symfony/property-access": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Redis\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Redis extension Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/redis-messenger/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T12:40:44+00:00" + }, { "name": "symfony/routing", "version": "v5.3.0", diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6b7319ce2be76433a6a14e310b54b6bb059a386b --- /dev/null +++ b/config/packages/messenger.yaml @@ -0,0 +1,14 @@ +framework: + messenger: + # Uncomment this (and the failed transport below) to send failed messages to this transport for later handling. + # failure_transport: failed + + transports: + # https://symfony.com/doc/current/messenger.html#transport-configuration + # async: '%env(MESSENGER_TRANSPORT_DSN)%' + # failed: 'doctrine://default?queue_name=failed' + # sync: 'sync://' + + routing: + # Route your messages to the transports + # 'App\Message\YourMessage': async diff --git a/src/Message/SendEmailMessage.php b/src/Message/SendEmailMessage.php new file mode 100644 index 0000000000000000000000000000000000000000..37fe9efd7b9af0fe6593cbbeea2877bfb15179c6 --- /dev/null +++ b/src/Message/SendEmailMessage.php @@ -0,0 +1,23 @@ +postId = $postId; + } +// + public function getPostId(): string + { + return $this->postId; + } +} diff --git a/src/MessageHandler/SendEmailMessageHandler.php b/src/MessageHandler/SendEmailMessageHandler.php new file mode 100644 index 0000000000000000000000000000000000000000..d7d334d6d2b6ec4a0f6ab103e12c38a4f44df832 --- /dev/null +++ b/src/MessageHandler/SendEmailMessageHandler.php @@ -0,0 +1,47 @@ +postRepository = $postRepository; + $this->parameterBag = $parameterBag; + $this->mailer = $mailer; + } + + public function __invoke(SendEmailMessage $message) + { + $postId = $message->getPostId(); + $post = $this->postRepository->find($postId); + + $email = (new Email()) + ->from($this->parameterBag->get('send_email')) + ->to($this->parameterBag->get('editor_email'), $this->parameterBag->get('checker_email')) + ->subject('有新的文章<'.$post->getTitle().'>发布了,请检查。') + ->text('有新的文章<'.$post->getTitle().'>发布了,请检查。'); + sleep(10); + $this->mailer->send($email); + } +} diff --git a/symfony.lock b/symfony.lock index 2e6424358e174aeefe0432c868bb3af1c0362917..0b74843eb624629086e2665d9b9d93a0a51b429b 100644 --- a/symfony.lock +++ b/symfony.lock @@ -286,6 +286,9 @@ "config/packages/sensio_framework_extra.yaml" ] }, + "symfony/amqp-messenger": { + "version": "v5.3.4" + }, "symfony/asset": { "version": "v5.3.2" }, @@ -340,6 +343,9 @@ "symfony/doctrine-bridge": { "version": "v5.3.1" }, + "symfony/doctrine-messenger": { + "version": "v5.3.4" + }, "symfony/dom-crawler": { "version": "v5.3.0" }, @@ -446,6 +452,18 @@ "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" } }, + "symfony/messenger": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "e9a414b113ceadbf4e52abe37bf8f1b443f06ccb" + }, + "files": [ + "config/packages/messenger.yaml" + ] + }, "symfony/mime": { "version": "v5.3.2" }, @@ -545,6 +563,9 @@ "symfony/rate-limiter": { "version": "v5.3.0" }, + "symfony/redis-messenger": { + "version": "v5.3.4" + }, "symfony/routing": { "version": "5.3", "recipe": {