2017 © Pedro Peláez
 

library event-request-response

Allows to publish messages and getting response from each subscriber

image

gigi/event-request-response

Allows to publish messages and getting response from each subscriber

  • Tuesday, November 28, 2017
  • by gigi
  • Repository
  • 1 Watchers
  • 0 Stars
  • 28 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Overview

Small Subscriber/Publisher messaging system., (*1)

Package implements One-way Message Exchange Pattern and Request-Reply Message Exchange Pattern., (*2)

Requirement

This library package requires PHP 5.4 or later., (*3)

Installation

$ composer require gigi/event-request-response, (*4)

Usage

Create Messenger instance (singleton), (*5)

use gigi\events\classes\Messenger;

$handler = Messenger::getInstance();

Subscribe to messages, (*6)

$handler->subscribe('message.test', function ($message) {
    // do something with message
    // stops further message processing
    $message->setIsHandled(true);

    // optionally return mixed response
    // Will be accessible in reply object (Message::getData())
    return 'Data to return';
});

Create message, (*7)

use gigi\events\classes\Message;

$message = new Message('message.test', 'Mixed data to send');

Use one of three methods to publish $message, (*8)

// one-way notifier
$handler->request($message);

```php // request-response notifier // Returns array of Messages $result = $handler->requestReply($message);, (*9)

```php
// request-response notifier
// Returns only first reply (Message object)
// Use if Your don't care of who can return an answer
// for example if you want to get list of all users ('users.get.all')
// or you know for sure that only one subscriber listening

$result = $handler->requestFirstReply($message);

For detailed usage see examples/singleton.php., (*10)

If singleton makes you cry or your project has own dependency injection container inject gigi\classes\MessageHandler to new instances of gigi\classes\Publisher and gigi\classes\Subscriber. See examples/di.php, (*11)

Usage with Yii2 Framework

Add Publisher and Subscriber components to config (config/web.php), (*12)

return [
    ...
    'components' => [
        ...
        'subscriber' => 'gigi\events\classes\Subscriber',
        'publisher'  => 'gigi\events\classes\Publisher',
        ...

Add gigi\events\classes\MessageHandlerInterface to DI container. For more information about Yii2 DI container see http://www.yiiframework.com/doc-2.0/guide-concept-di-container.html, (*13)

\Yii::$container->setSingleton(
    'gigi\events\interfaces\MessageHandlerInterface',
    'gigi\events\classes\MessageHandler'
);

Subscribing for event:, (*14)

\Yii::$app->get('subscriber')->subscribe($event, $handler);

Publishing:, (*15)

...
use gigi\events\classes\Message;
...

/** @var \gigi\events\interfaces\MessageInterface $message */
$message = new Message($messageName, $data);

// async
\Yii::$app->get('publisher')->request($message);

// all replies
\Yii::$app->get('publisher')->requestReply($message);

// first reply
\Yii::$app->get('publisher')->requestFirstReply($message);

Or implement you own classes for interfaces..., (*16)

Enjoy :), (*17)

The Versions

28/11 2017

dev-master

9999999-dev

Allows to publish messages and getting response from each subscriber

  Sources   Download

MIT

by Alexey Snigirev

events request response message subscribe publish

17/02 2016

1.0.1

1.0.1.0

Allows to publish messages and getting response from each subscriber

  Sources   Download

MIT

by Alexey Snigirev

events request response message subscribe publish

17/02 2016

1.0.0

1.0.0.0

Allows to publish messages and getting response from each subscriber

  Sources   Download

MIT

by Alexey Snigirev

events request response message subscribe publish