Download the PHP package nilportugues/messagebus without Composer

On this page you can find all versions of the php package nilportugues/messagebus. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package messagebus

Message Bus

Build Status Scrutinizer Code Quality SensioLabsInsight Latest Stable Version Total Downloads License Donate

Implementation for the CommandBus, the QueryBus and the EventBus in PHP 7 and using PSR-11.


Installation

Use Composer to install the package:

Introduction

The idea of a message bus is that you create message objects that represent what you want your application to do. Then, you toss it into the bus and the bus makes sure that the message object gets to where it needs to go.

Easy right? Keep reading!

What is a Message Bus?

A Message Bus is a pipe of Messages. This implementation takes care of 3 types of messages, Commands, Queries and Events. While all look similar at first, their intent is different.

From this classification, one can spot that Command and Events can work together very well.

What are its benefits?

Given the nature of the message, implementing an interface, you may write behaviours that wrap the message to log, process or modify the response using the Decorator pattern. These are called Middleware.

For instance:

To wrap-up, its benefits are:


1. CommandBus

1.1 - Usage

1.1.1 - Create a Command

1.1.2 - Create a CommandHandler

The Command Handler must implement the CommandHandler interface and implement the __invoke method.

For instance:

1.1.3 - Register the CommandHandler

I'm assuming you're using some kind Service Container. Now it's time to register your CommandHandler.

For instance, in a Psr\Container compliant Service Container, we can do this as follows:

1.1.4 - Setting up the CommandBus

The Command Bus Middleware requires two classes to be injected. First one is the command translator, and second one the handler resolver.

CommandTranslator

Classes implementing this interface will provide the FQN for the Handler class given a Command.

This package provides an implementation, NilPortugues\MessageBus\CommandBus\Translator\AppendStrategy which basically appends the word Handler to the provided Command class.

For custom strategies, you may write your own implementing the NilPortugues\MessageBus\CommandBus\Contracts\CommandTranslator interface.

CommandHandlerResolver

Classes implementing this interface will be resolving the class for the instance required based on the output of the CommandTranslator used.

This package provides an implementation, NilPortugues\MessageBus\CommandBus\Resolver\PsrContainerResolver, that expects any Service Container implementing the Psr\Container interface.

For Symfony 2 and 3 framework users up to version 3.2, you should use Symfony Container: NilPortugues\MessageBus\CommandBus\Resolver\SymfonyContainerResolver. For Symfony 3.3 and up use the PSR-11 ContainerResolver class.

1.1.5 - Registering the remaining CommandBus classes

The minimum set up to get the Command Bus working is:

If for instance, we want to log everything happening in the Command Bus, we'll add to the middleware list the logger middleware. This will wrap the Command Bus, being able to log before and after it ran, and if there was an error.

1.1.6 - Running the CommandBus

Finally, to make use of the CommandBus, all you need to do is run this code:

1.2 - Predefined Middlewares

TransactionalCommandBusMiddleware

LoggerQueryBusMiddleware

1.3 - Custom Middlewares

In order to write custom middleware a new class implementing the NilPortugues\MessageBus\CommandBus\Contracts\CommandBusMiddleware interface is required.


2. QueryBus

2.1 - Usage

2.1.1 - Create a Query

2.1.2 - Create a QueryHandler

The Query Handler must implement the QueryHandler interface and implement the __invoke method.

For instance:

2.1.3 - Create a QueryResponse

Response queries are generic responses.

If you take into account section 2.1.2, you'll see the UserQueryResponse has a $user injected into the constructor. This has been done in order to reuse the QueryResponse in other scenarios such as fetching an updated user.

2.1.4 - Register the QueryHandler

I'm assuming you're using some kind Service Container. Now it's time to register your QueryHandler.

For instance, in a Psr\Container compliant Service Container, we can do this as follows:

2.1.5 - Setting up the QueryBusMiddleware

The Query Bus Middleware requires two classes to be injected. First one is the query translator, and second one the handler resolver.

QueryTranslator

Classes implementing this interface will provide the FQN for the Handler class given a Query.

This package provides an implementation, NilPortugues\MessageBus\QueryBus\Translator\AppendStrategy which basically appends the word Handler to the provided Query class.

For custom strategies, you may write your own implementing the NilPortugues\MessageBus\QueryBus\Contracts\QueryTranslator interface.

QueryHandlerResolver

Classes implementing this interface will be resolving the class for the instance required based on the output of the QueryTranslator used.

This package provides an implementation, NilPortugues\MessageBus\QueryBus\Resolver\PsrContainerResolver, that expects any Service Container implementing the Psr\Container interface.

For Symfony 2 and 3 framework users up to version 3.2, you should use Symfony Container: NilPortugues\MessageBus\QueryBus\Resolver\SymfonyContainerResolver. For Symfony 3.3 and up use the PSR-11 ContainerResolver class.

2.1.5 - Registering the remaining QueryBus classes

The minimum set up to get the Query Bus working is:

If for instance, we want to log everything happening in the Query Bus, we'll add to the middleware list the logger middleware. This will wrap the Query Bus, being able to log before and after it ran, and if there was an error.

2.1.6 - Running the QueryBus

Finally, to make use of the QueryBus, all you need to do is run this code:

2.2 - Predefined Middlewares

CacheQueryBusMiddleware

LoggerQueryBusMiddleware

2.3 - Custom Middlewares

In order to write custom middleware a new class implementing the NilPortugues\MessageBus\QueryBus\Contracts\QueryBusMiddleware interface is required.


3. EventBus

3.1 - Usage

3.1.1 - Create an Event

We'll be creating an Event. Due to the nature of events, an event may be mapped to one or more Event Handlers.

3.1.2 - Create an EventHandler

To illustrate the power of eventing, we'll map the previous event UserRegistered to two EventHandlers.

First Event Handler

First event handler we'll create assumes we've got an email service to send a welcome email.

Second Event Handler

Second event handler we'll create the relationships in our database for user friends and user credits.

3.1.3 - (Optional) Set the EventHandler's Priority

Sometimes you want or must make sure an action precedes another one.

By default, all events have a priority, this being set by the EventHandlerPriority::LOW_PRIORITY constant value.

To implement your priority order in your classes implement the EventHandler interface, must implement another interface, the EventHandlerPriority.

For instance, if we would like SendWelcomeEmailHandler to happen after SetupUserAccountHandler, we should give the first less priority, or the latter more.

SetupUserAccountHandler should go first when dispatching event UserRegistered

SendWelcomeEmailHandler should go second when dispatching event UserRegistered

Notice how a good idea is to set up relative ordering by subtracting to the MAX_PRIORITY order.

3.1.4 - Register the EventHandler

I'm assuming you're using some kind Service Container. Now it's time to register your Event Handlers.

For instance, in a Psr\Container compliant Service Container, we can do this as follows:

3.1.5 - Setting up the EventBusMiddleware

The Event Bus Middleware requires two classes to be injected. First one is the Event translator, and second one the handler resolver.

EventTranslator

Takes care of registering the EventHandlers subscribed to an Event.

Its implementation can be found at: NilPortugues\MessageBus\EventBus\Translator\EventFullyQualifiedClassNameStrategy.

EventHandlerResolver

Classes implementing this interface will be resolving the class for the instance required based on the output of the EventTranslator used.

This package provides an implementation, NilPortugues\MessageBus\EventBus\Resolver\PsrContainerResolver, that expects any Service Container implementing the Psr\Container interface.

For Symfony 2 and 3 framework users up to version 3.2, you should use Symfony Container: NilPortugues\MessageBus\EventBus\Resolver\SymfonyContainerResolver. For Symfony 3.3 and up use the PSR-11 ContainerResolver class.

3.1.6 - Registering the remaining EventBus classes

The minimum set up to get the Event Bus working is:

If for instance, we want to log everything happening in the Event Bus, we'll add to the middleware list the logger middleware. This will wrap the Event Bus, being able to log before and after it ran, and if there was an error.

3.1.7 - Running the EventBus

Finally, to make use of the EventBus, all you need to do is run this code:

3.1.8 - (Optional) Running the EventBus as a Queue

Save your users time and load your pages faster! Go asynchronous using a queue.

To do so, you'll have to require an additional package: EventBus Queue. This extension can be downloaded using composer:

Documentation and installation guide can be found in its repository.

3.2 - Predefined Middlewares

TransactionalEventBusMiddleware

LoggerEventBusMiddleware

ProducerEventBusMiddleware

3.3 - Custom Middlewares

In order to write custom middleware a new class implementing the NilPortugues\MessageBus\EventBus\Contracts\EventBusMiddleware interface is required.


4 - Serializers

Serializers are to be used mainly all the <Name>ProducerEventBusMiddleware classes. You may also find this in Cache classes.

Choose one or another depending on your needs.

4.1 - NilPortugues\MessageBus\Serializer\NativeSerializer

For caching, this is the best option.

In the EventBus use this if your Consumer is written in PHP and will share the same code base as the object serialized.

4.2 - NilPortugues\MessageBus\Serializer\JsonSerializer

Not recommended for caching.

In the EventBus use this if your Consumer is written in PHP but your consumers may be written in many languages.

4.3 - NilPortugues\MessageBus\Serializer\JsonObjectSerializer

Doesn't work for caching.

In the EventBus use this if your Consumer is written in PHP but you're not consuming data currently.

Contribute

Contributions to the package are always welcome!

Support

Get in touch with me using one of the following means:

Authors

License

The code base is licensed under the MIT license.


All versions of messagebus with dependencies

PHP Build Version
Package Version
Requires php Version >=7
container-interop/container-interop Version ^1.2
nilportugues/assert Version ^1.0
nilportugues/serializer Version ^1.2
psr/container Version ^1.0
psr/log Version ^1.0
psr/cache Version ^1.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package nilportugues/messagebus contains the following files

Loading the files please wait ....