From 721fb4b237492ad7f913e34eba558591ccb051c2 Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Mon, 5 Sep 2016 17:28:20 +0200 Subject: [PATCH 01/10] Added SQS driver --- .travis.yml | 2 +- composer.json | 8 ++- examples/sqs/emitter.php | 25 +++++++ examples/sqs/processor.php | 22 ++++++ src/Driver/AmazonSqsDriver.php | 124 +++++++++++++++++++++++++++++++++ 5 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 examples/sqs/emitter.php create mode 100644 examples/sqs/processor.php create mode 100644 src/Driver/AmazonSqsDriver.php diff --git a/.travis.yml b/.travis.yml index d2507c6..8362ce4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ php: - 5.5 - 5.6 - 7.0 + - 7.1 - hhvm sudo: false @@ -17,7 +18,6 @@ sudo: false matrix: allow_failures: - php: hhvm - - php: 7.0 include: - php: 5.4 env: 'COMPOSER_FLAGS="--prefer-stable --prefer-lowest"' diff --git a/composer.json b/composer.json index 86cc84e..f4b034f 100644 --- a/composer.json +++ b/composer.json @@ -25,19 +25,21 @@ "require-dev": { "phpunit/phpunit": "~4.3", "squizlabs/php_codesniffer": "~2.2", - "videlalvaro/php-amqplib": "*", + "php-amqplib/php-amqplib": "*", "scrutinizer/ocular": "~1.1", "jakub-onderka/php-parallel-lint": "^0.9.0", "ext-redis": "*", "ext-zmq": "*", - "predis/predis": "*" + "predis/predis": "*", + "aws/aws-sdk-php": "2.*" }, "suggest": { "monolog/monolog": "Basic logger implements psr/logger", "ext-redis": "Allow use for redis driver with native redis php extension", "ext-zmq": "Allow use for ZeroMQ driver with native zmq php extension", "npredis/predis": "Allow use for redis driver with php package Predis", - "videlalvaro/php-amqplib": "Allow using rabbimq as driver" + "aws/aws-sdk-php": "Allow use Amazon SQS driver", + "php-amqplib/php-amqplib": "Allow using rabbimq as driver" }, "autoload": { "psr-4": { diff --git a/examples/sqs/emitter.php b/examples/sqs/emitter.php new file mode 100644 index 0000000..5eaa98d --- /dev/null +++ b/examples/sqs/emitter.php @@ -0,0 +1,25 @@ + 'latest', + 'region' => 'eu-west-1', + 'key' => '*key*', + 'secret' => '*secret*', +]); + +$driver = new AmazonSqsDriver($client, '*queueName*'); +$dispatcher = new Dispatcher($driver); +$counter = 1; +while (true) { + $dispatcher->emit(new Message('type1', ['message' => $counter])); + echo "Emited message $counter\n"; + $counter++; + sleep(1); +} diff --git a/examples/sqs/processor.php b/examples/sqs/processor.php new file mode 100644 index 0000000..78dd6ae --- /dev/null +++ b/examples/sqs/processor.php @@ -0,0 +1,22 @@ + 'latest', + 'region' => 'eu-west-1', + 'key' => '*key*', + 'secret' => '*secret*', +]); + +$driver = new AmazonSqsDriver($client, '*queueName*'); +$dispatcher = new Dispatcher($driver); + +$dispatcher->registerHandler('type1', new EchoHandler()); + +$dispatcher->handle(); diff --git a/src/Driver/AmazonSqsDriver.php b/src/Driver/AmazonSqsDriver.php new file mode 100644 index 0000000..6d211d9 --- /dev/null +++ b/src/Driver/AmazonSqsDriver.php @@ -0,0 +1,124 @@ + + * use Aws\Sqs\SqsClient; + * + * $client = SqsClient::factory(array( + * 'profile' => '', + * 'region' => '' + * )); + * + * + * or + * + * + * use Aws\Common\Aws; + * + * // Create a service builder using a configuration file + * $aws = Aws::factory('/path/to/my_config.json'); + * + * // Get the client from the builder by namespace + * $client = $aws->get('Sqs'); + * + * + * More examples see: https://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-sqs.html + * + * + * @see examples/sqs folder + * + * @param AMQPChannel $client + * @param string $queueName + * @param array $queueAttributes + */ + public function __construct(SqsClient $client, $queueName, $queueAttributes = []) + { + $this->client = $client; + $this->queueName = $queueName; + $this->serializer = new MessageSerializer(); + + $result = $client->createQueue([ + 'QueueName' => $queueName, + 'Attributes' => $queueAttributes, + ]); + $this->queueUrl = $result->get('QueueUrl'); + } + + /** + * {@inheritdoc} + */ + public function send(MessageInterface $message) + { + $this->client->sendMessage([ + 'QueueUrl' => $this->queueUrl, + 'MessageBody' => $this->serializer->serialize($message), + ]); + } + + /** + * {@inheritdoc} + */ + public function wait(Closure $callback) + { + while (true) { + $result = $this->client->receiveMessage(array( + 'QueueUrl' => $this->queueUrl, + 'WaitTimeSeconds' => 20, + )); + + $messages = $result['Messages']; + + if ($messages) { + foreach ($messages as $message) { + $hermesMessage = $this->serializer->unserialize($message['Body']); + $callback($hermesMessage); + $result = $this->client->deleteMessage(array( + 'QueueUrl' => $this->queueUrl, + 'ReceiptHandle' => $message['ReceiptHandle'], + )); + } + } + + if ($this->sleepInterval) { + sleep($this->sleepInterval); + } + } + } +} From e301ff95734125c7e87b648b54dcb6fcdcd01106 Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Tue, 22 Mar 2016 15:06:43 +0100 Subject: [PATCH 02/10] Initial commit --- src/Dispatcher.php | 17 +++++++++++++--- src/Restart/RestartInterface.php | 19 ++++++++++++++++++ src/Restart/SharedFiledRestart.php | 32 ++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 src/Restart/RestartInterface.php create mode 100644 src/Restart/SharedFiledRestart.php diff --git a/src/Dispatcher.php b/src/Dispatcher.php index efc68cb..8f7498b 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -7,6 +7,7 @@ use Psr\Log\LogLevel; use Tomaj\Hermes\Handler\HandlerInterface; use Tomaj\Hermes\Driver\DriverInterface; +use Tomaj\Hermes\Restart\RestartInterface; use Tracy\Debugger; class Dispatcher implements DispatcherInterface @@ -25,6 +26,13 @@ class Dispatcher implements DispatcherInterface */ private $logger; + /** + * Restart + * + * @var RestartInterface + */ + private $restart; + /** * All registered handalers * @@ -36,11 +44,14 @@ class Dispatcher implements DispatcherInterface * Create new Dispatcher * * @param DriverInterface $driver + * @param LoggerInterface $logger + * @param RestartInterface $restart */ - public function __construct(DriverInterface $driver, LoggerInterface $logger = null) + public function __construct(DriverInterface $driver, LoggerInterface $logger = null, RestartInterface $restart = null) { $this->driver = $driver; $this->logger = $logger; + $this->restart = $restart; } /** @@ -49,7 +60,7 @@ public function __construct(DriverInterface $driver, LoggerInterface $logger = n public function emit(MessageInterface $message) { $this->driver->send($message); - + $this->log( LogLevel::INFO, "Dispatcher send message #{$message->getId()} to driver " . get_class($this->driver), @@ -109,7 +120,7 @@ private function handleMessage($handler, $message) try { $result = $handler->handle($message); - + $this->log( LogLevel::INFO, "End handle message #{$message->getId()} ({$message->getType()})", diff --git a/src/Restart/RestartInterface.php b/src/Restart/RestartInterface.php new file mode 100644 index 0000000..5b77ed8 --- /dev/null +++ b/src/Restart/RestartInterface.php @@ -0,0 +1,19 @@ +filePath = $filePath; + } + + /** + * {@inheritdoc} + */ + public function shouldRestart(DateTime $startTime) + { + if (!file_exists($this->filePath)) { + return false; + } + + $time = filemtime($this->filePath); + if ($time >= $startTime->getTimestamp()) { + return true; + } + + return false; + } +} From 0fdb5685c2a86427cee2e9d5b3ff2a83c123f637 Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Wed, 23 Mar 2016 15:07:51 +0100 Subject: [PATCH 03/10] Fixed typos and enable restart --- src/Dispatcher.php | 67 +++++++++++++++++-- src/DispatcherInterface.php | 4 +- src/Handler/HandlerInterface.php | 4 +- src/Message.php | 2 +- src/MessageInterface.php | 12 ++-- ...FiledRestart.php => SharedFileRestart.php} | 0 src/SerializerInterface.php | 4 +- 7 files changed, 75 insertions(+), 18 deletions(-) rename src/Restart/{SharedFiledRestart.php => SharedFileRestart.php} (100%) diff --git a/src/Dispatcher.php b/src/Dispatcher.php index 8f7498b..4909d1a 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -9,6 +9,7 @@ use Tomaj\Hermes\Driver\DriverInterface; use Tomaj\Hermes\Restart\RestartInterface; use Tracy\Debugger; +use DateTime; class Dispatcher implements DispatcherInterface { @@ -34,12 +35,17 @@ class Dispatcher implements DispatcherInterface private $restart; /** - * All registered handalers + * All registered handlers * - * @var array + * @var HandlerInterface[][] */ private $handlers = []; + /** + * @var DateTime + */ + private $startTime; + /** * Create new Dispatcher * @@ -52,6 +58,7 @@ public function __construct(DriverInterface $driver, LoggerInterface $logger = n $this->driver = $driver; $this->logger = $logger; $this->restart = $restart; + $this->startTime = new DateTime(); } /** @@ -73,8 +80,8 @@ public function emit(MessageInterface $message) * Basic method for background job to star listening. * * This method hook to driver wait() method and start listening events. - * Method is blockig, so when you call it all processing will stop. - * WARNING! Dont use it on web server calls. Run it only with cli. + * Method is blocking, so when you call it all processing will stop. + * WARNING! Don't use it on web server calls. Run it only with cli. * * @return void */ @@ -86,10 +93,25 @@ public function handle() "Start handle message #{$message->getId()} ({$message->getType()})", $this->messageLoggerContext($message) ); - return $this->dispatch($message); + + $result = $this->dispatch($message); + + if ($this->restart->shouldRestart($this->startTime)) { + $this->log(LogLevel::NOTICE, 'Existing hermes dispatcher - restart'); + exit; + } + + return $result; }); } + /** + * Dispatch message + * + * @param MessageInterface $message + * + * @return bool + */ private function dispatch(MessageInterface $message) { $type = $message->getType(); @@ -111,7 +133,15 @@ private function dispatch(MessageInterface $message) return $result; } - private function handleMessage($handler, $message) + /** + * Handle given message with given handler + * + * @param HandlerInterface $handler + * @param MessageInterface $message + * + * @return bool + */ + private function handleMessage(HandlerInterface $handler, MessageInterface $message) { // check if handler implements Psr\Log\LoggerAwareInterface (you can use \Psr\Log\LoggerAwareTrait) if ($this->logger && method_exists($handler, 'setLogger')) { @@ -138,6 +168,13 @@ private function handleMessage($handler, $message) return $result; } + /** + * Check if actual dispatcher has handler for given type + * + * @param string $type + * + * @return bool + */ private function hasHandlers($type) { return isset($this->handlers[$type]) && count($this->handlers[$type]) > 0; @@ -155,6 +192,13 @@ public function registerHandler($type, HandlerInterface $handler) $this->handlers[$type][] = $handler; } + /** + * Serialize message to logger context + * + * @param MessageInterface $message + * + * @return array + */ private function messageLoggerContext(MessageInterface $message) { return [ @@ -165,7 +209,16 @@ private function messageLoggerContext(MessageInterface $message) ]; } - private function log($level, $message, $context) + /** + * Interal log method wrapper + * + * @param string $level + * @param string $message + * @param array $context + * + * @return void + */ + private function log($level, $message, array $context = array()) { if ($this->logger) { $this->logger->log($level, $message, $context); diff --git a/src/DispatcherInterface.php b/src/DispatcherInterface.php index 415707f..2fba66b 100644 --- a/src/DispatcherInterface.php +++ b/src/DispatcherInterface.php @@ -19,9 +19,9 @@ public function emit(MessageInterface $message); /** * Register new handler * - * With this method you can register new handler for selcted $type. + * With this method you can register new handler for selected $type. * This handler will be called in background job when event - * of registered $type will be emited. + * of registered $type will be emitted. * * @param string $type * @param HandlerInterface $handler diff --git a/src/Handler/HandlerInterface.php b/src/Handler/HandlerInterface.php index 8b8bf01..786fccf 100644 --- a/src/Handler/HandlerInterface.php +++ b/src/Handler/HandlerInterface.php @@ -11,9 +11,11 @@ interface HandlerInterface * * You can implement you own handlers only with this function. * This function will be ne executed on web server so you can put there - * long procesing jobs that will be executed by dispatcher. + * long processing jobs that will be executed by dispatcher. * You have to register all your handlers to Dispatcher for specified types. * + * @param MessageInterface $message + * * @return bool */ public function handle(MessageInterface $message); diff --git a/src/Message.php b/src/Message.php index bf8199a..4cb6b50 100644 --- a/src/Message.php +++ b/src/Message.php @@ -32,7 +32,7 @@ class Message implements MessageInterface * @var string $type * @var array $payload * @var string $messageId - * @var string $created microtime timestamp + * @var string $created timestamp (micro) * */ public function __construct($type, array $payload = null, $messageId = null, $created = null) diff --git a/src/MessageInterface.php b/src/MessageInterface.php index 90c1312..79565a4 100644 --- a/src/MessageInterface.php +++ b/src/MessageInterface.php @@ -7,16 +7,16 @@ interface MessageInterface /** * Message identifier. * - * This identifier should be uniq all the time. - * Recomendation is to use UUIDv4 (Included Message implementation - * generating UUIDv4 identifiers ) + * This identifier should be unique all the time. + * Recommendation is to use UUIDv4 (Included Message implementation + * generating UUIDv4 identifiers) * * @return string */ public function getId(); /** - * Message creation date - microtime timestamp + * Message creation date - micro timestamp * * @return string */ @@ -25,7 +25,7 @@ public function getCreated(); /** * Message type * - * Based on this field, message will be dispatched and will be sended to + * Based on this field, message will be dispatched and will be sent to * appropriate handler. * * @return string @@ -36,7 +36,7 @@ public function getType(); * Payload data. * * This data can be used for anything that you would like to send to handler. - * Warning! This data has to be serializable to string. Dont put there php resources + * Warning! This data has to be serializable to string. Don't put there php resources * like database connection resources, file handlers etc.. * * @return array diff --git a/src/Restart/SharedFiledRestart.php b/src/Restart/SharedFileRestart.php similarity index 100% rename from src/Restart/SharedFiledRestart.php rename to src/Restart/SharedFileRestart.php diff --git a/src/SerializerInterface.php b/src/SerializerInterface.php index 524f3ff..66d00e3 100644 --- a/src/SerializerInterface.php +++ b/src/SerializerInterface.php @@ -10,6 +10,8 @@ interface SerializerInterface * Method is used when serializing $message to driver. * Message has to be serializable to string. * + * @param MessageInterface $message + * * @return string */ public function serialize(MessageInterface $message); @@ -17,7 +19,7 @@ public function serialize(MessageInterface $message); /** * Opposite serialize method. * - * Message needs to be unserialized from input string. + * Message needs to be un-serialized from input string. * This string will be received from driver. * * @param string $string From 98d5ce874a29163570055948224e2af298a5a848 Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Wed, 23 Mar 2016 15:45:57 +0100 Subject: [PATCH 04/10] Added tests --- src/Dispatcher.php | 37 ++++++++++++++----------- src/Restart/RestartException.php | 9 ++++++ tests/Restart/DispatcherRestartTest.php | 32 +++++++++++++++++++++ tests/Restart/SharedFileRestartTest.php | 28 +++++++++++++++++++ tests/Restart/StopRestart.php | 25 +++++++++++++++++ 5 files changed, 115 insertions(+), 16 deletions(-) create mode 100644 src/Restart/RestartException.php create mode 100644 tests/Restart/DispatcherRestartTest.php create mode 100644 tests/Restart/SharedFileRestartTest.php create mode 100644 tests/Restart/StopRestart.php diff --git a/src/Dispatcher.php b/src/Dispatcher.php index 4909d1a..4b5123d 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -3,10 +3,12 @@ namespace Tomaj\Hermes; use Exception; +use Nette\Application\AbortException; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; use Tomaj\Hermes\Handler\HandlerInterface; use Tomaj\Hermes\Driver\DriverInterface; +use Tomaj\Hermes\Restart\RestartException; use Tomaj\Hermes\Restart\RestartInterface; use Tracy\Debugger; use DateTime; @@ -87,22 +89,25 @@ public function emit(MessageInterface $message) */ public function handle() { - $this->driver->wait(function (MessageInterface $message) { - $this->log( - LogLevel::INFO, - "Start handle message #{$message->getId()} ({$message->getType()})", - $this->messageLoggerContext($message) - ); - - $result = $this->dispatch($message); - - if ($this->restart->shouldRestart($this->startTime)) { - $this->log(LogLevel::NOTICE, 'Existing hermes dispatcher - restart'); - exit; - } - - return $result; - }); + try { + $this->driver->wait(function (MessageInterface $message) { + $this->log( + LogLevel::INFO, + "Start handle message #{$message->getId()} ({$message->getType()})", + $this->messageLoggerContext($message) + ); + + $result = $this->dispatch($message); + + if ($this->restart && $this->restart->shouldRestart($this->startTime)) { + throw new RestartException('Restart'); + } + + return $result; + }); + } catch (RestartException $e) { + $this->log(LogLevel::NOTICE, 'Existing hermes dispatcher - restart'); + } } /** diff --git a/src/Restart/RestartException.php b/src/Restart/RestartException.php new file mode 100644 index 0000000..52818ee --- /dev/null +++ b/src/Restart/RestartException.php @@ -0,0 +1,9 @@ + 'b']); + $message2 = new Message('event1', ['c' => 'd']); + + $driver = new DummyDriver([$message1, $message2]); + $stopRestart = new StopRestart(1); + $dispatcher = new Dispatcher($driver, null, $stopRestart); + + $handler = new TestHandler(); + + $dispatcher->registerHandler('event1', $handler); + + $dispatcher->handle(); + + $receivedMessages = $handler->getReceivedMessages(); + $this->assertEquals(1, count($receivedMessages)); + } +} diff --git a/tests/Restart/SharedFileRestartTest.php b/tests/Restart/SharedFileRestartTest.php new file mode 100644 index 0000000..b4db04f --- /dev/null +++ b/tests/Restart/SharedFileRestartTest.php @@ -0,0 +1,28 @@ +assertFalse($sharedRestart1->shouldRestart(new DateTime())); + } + + public function testWithNewFile() + { + $sharedRestart1 = new SharedFileRestart(tempnam(sys_get_temp_dir(), 'hermestest')); + $this->assertTrue($sharedRestart1->shouldRestart(new DateTime('-3 minutes'))); + } + + public function testWithOldFile() + { + $sharedRestart1 = new SharedFileRestart(tempnam(sys_get_temp_dir(), 'hermestest')); + $this->assertFalse($sharedRestart1->shouldRestart(new DateTime('+3 minutes'))); + } +} diff --git a/tests/Restart/StopRestart.php b/tests/Restart/StopRestart.php new file mode 100644 index 0000000..1b8b301 --- /dev/null +++ b/tests/Restart/StopRestart.php @@ -0,0 +1,25 @@ +eventsStop = $eventsStop; + } + + public function shouldRestart(DateTime $startTime) + { + if ($this->eventsStop == 1) { + return true; + } + $this->eventsStop--; + return false; + } +} From ae720406b3ad8b03e08bdb0882bb9a95d2dcd890 Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Wed, 23 Mar 2016 16:02:20 +0100 Subject: [PATCH 05/10] Added Tracy Debugger logging --- src/Dispatcher.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Dispatcher.php b/src/Dispatcher.php index 4b5123d..2394a72 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -3,7 +3,6 @@ namespace Tomaj\Hermes; use Exception; -use Nette\Application\AbortException; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; use Tomaj\Hermes\Handler\HandlerInterface; @@ -107,6 +106,8 @@ public function handle() }); } catch (RestartException $e) { $this->log(LogLevel::NOTICE, 'Existing hermes dispatcher - restart'); + } catch (Exception $exception) { + Debugger::log($exception, Debugger::EXCEPTION); } } From 4386c7449a682e0a7ec662f796847cd29da3ff14 Mon Sep 17 00:00:00 2001 From: Michal Lulco Date: Tue, 26 Apr 2016 09:30:42 +0200 Subject: [PATCH 06/10] Added lazy Rabbit MQ driver --- src/Driver/LazyRabbitMqDriver.php | 77 +++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/Driver/LazyRabbitMqDriver.php diff --git a/src/Driver/LazyRabbitMqDriver.php b/src/Driver/LazyRabbitMqDriver.php new file mode 100644 index 0000000..52ebfa0 --- /dev/null +++ b/src/Driver/LazyRabbitMqDriver.php @@ -0,0 +1,77 @@ +connection = $connection; + $this->queue = $queue; + $this->serializer = new MessageSerializer(); + } + + /** + * {@inheritdoc} + */ + public function send(MessageInterface $message) + { + $rabbitMessage = new AMQPMessage($this->serializer->serialize($message)); + $this->getChannel()->basic_publish($rabbitMessage, '', $this->queue); + } + + /** + * {@inheritdoc} + */ + public function wait(Closure $callback) + { + $this->getChannel()->basic_consume( + $this->queue, + '', + false, + true, + false, + false, + function ($rabbitMessage) use ($callback) { + $message = $this->serializer->unserialize($rabbitMessage->body); + $callback($message); + } + ); + + while (count($this->getChannel()->callbacks)) { + $this->getChannel()->wait(); + } + } + + private function getChannel() + { + if ($this->channel) { + return $this->channel; + } + $this->channel = $this->connection->channel(); + $this->channel->queue_declare($this->queue, false, false, false, false); + return $this->channel; + } +} From c6db5be811c8787514605ba34b9da1f27a614599 Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Tue, 26 Apr 2016 21:22:30 +0200 Subject: [PATCH 07/10] Set version for php-amqplib --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index f4b034f..c7d2ebc 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "require-dev": { "phpunit/phpunit": "~4.3", "squizlabs/php_codesniffer": "~2.2", - "php-amqplib/php-amqplib": "*", + "php-amqplib/php-amqplib": "^2.6.3", "scrutinizer/ocular": "~1.1", "jakub-onderka/php-parallel-lint": "^0.9.0", "ext-redis": "*", From 4b0d5c83b0047249710d35d92b6fa566cee8bc1c Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Fri, 29 Apr 2016 14:20:29 +0200 Subject: [PATCH 08/10] Pridany changelog --- CHANGELOG.md | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eea9419..d3fe38f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,21 +4,29 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip ## [Unreleased][unreleased] + +## 0.4.0 - 2016-04-26 + ### Added - - Nothing right now -### Changed - - Nothing right now +* Added RabbitMQ Lazy driver -### Fixed - - Nothing right now +## 0.3.0 - 2016-03-23 + +### Added + +* Added possibility to gracefull restart worker with RestartInterface +* Added Tracy debugger log when error occured + +## 0.2.0 - 2015-10-30 + +### Changed -### Removed - - Nothing right now +* Handling responses from handlers. +* Tests structure refactored ## 0.1.0 - 2015-10-28 ### Added - - initial version with 2 drivers -[unreleased]: https://github.com/tomaj/hermes/compare/0.1.0...HEAD \ No newline at end of file +* initial version with 2 drivers From f32f3b47d19df8d21c35a1403bd44460b89cba1c Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Fri, 2 Sep 2016 09:09:01 +0200 Subject: [PATCH 09/10] Added ACK to rabbitmq driver --- CHANGELOG.md | 6 ++++++ src/Driver/RabbitMqDriver.php | 1 + 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3fe38f..d425bdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip ## [Unreleased][unreleased] +## 1.0.0 - 2016-09-02 + +### Added + +* First stable version +* Added ACK to rabbitmq driver ## 0.4.0 - 2016-04-26 diff --git a/src/Driver/RabbitMqDriver.php b/src/Driver/RabbitMqDriver.php index ba7a323..ac0ca0a 100644 --- a/src/Driver/RabbitMqDriver.php +++ b/src/Driver/RabbitMqDriver.php @@ -65,6 +65,7 @@ public function wait(Closure $callback) function ($rabbitMessage) use ($callback) { $message = $this->serializer->unserialize($rabbitMessage->body); $callback($message); + $rabbitMessage->delivery_info['channel']->basic_ack($rabbitMessage->delivery_info['delivery_tag']); } ); From 878b51e58aa129198454c28c3188d7f3110d0781 Mon Sep 17 00:00:00 2001 From: Tomas Majer Date: Mon, 5 Sep 2016 17:33:30 +0200 Subject: [PATCH 10/10] Added changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d425bdb..ccdd6de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip ## [Unreleased][unreleased] +## 1.1.0 - 2016-09-05 + +### Added + +* Amazon SQS driver + ## 1.0.0 - 2016-09-02 ### Added