logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Message::Passing - a simple way of doing messaging.

Author

       Tomas (t0m) Doran <bobtfish@bobtfish.net>

Components

       Below is a non-exhaustive list of components available.

   INPUTS
       Inputs receive data from a source (usually a network protocol).

       They are responsible for decoding the data into a hash before passing it onto the next stage.

       Inputs include:

       Message::Passing::Input::STDIN
       Message::Passing::Input::ZeroMQ
       Message::Passing::Input::STOMP
       Message::Passing::Input::AMQP
       Message::Passing::Input::Syslog
       Message::Passing::Input::Redis
       Message::Passing::Input::Test

       You can easily write your own input, just use AnyEvent, and consume Message::Passing::Role::Input.

   FILTER
       Filters can transform a message in any way.

       Examples include:

       Message::Passing::Filter::Null - Returns the input unchanged.
       Message::Passing::Filter::All - Stops any messages it receives from being passed to the output. I.e.
       literally filters all input out.
       Message::Passing::Filter::T - Splits the incoming message to multiple outputs.

       You can easily write your own filter, just consume Message::Passing::Role::Filter.

       Note  that  filters  can  be chained, and a filter can return undef to stop a message being passed to the
       output.

   OUTPUTS
       Outputs send data to somewhere, i.e. they consume messages.

       Message::Passing::Output::STDOUT
       Message::Passing::Output::AMQP
       Message::Passing::Output::STOMP
       Message::Passing::Output::ZeroMQ
       Message::Passing::Output::WebHooks
       Message::Passing::Output::Search::Elasticsearch
       Message::Passing::Output::Redis
       Message::Passing::Output::Test

Description

       A library for building high performance, loosely coupled and reliable/resilient applications, structured
       as small services which communicate over the network by passing messages.

   BASICPREMISE
       You have data for discrete events, represented by a hash (and serialized as JSON).

       This could be a text log line, an audit record of an API event, a metric emitted from your application
       that you wish to aggregate and process - anything that can be a simple hash really..

       You want to be able to shove these events over the network easily, and aggregate them / filter and
       rewrite them / split them into worker queues.

       This module is designed as a simple framework for writing components that let you do all of these things,
       in a simple and easily extensible manor.

       For a practical example, You generate events from a source (e.g.  ZeroMQ output of logs and performance
       metrics from your Catalyst FCGI or Starman workers) and run one script that will give you a central
       application log file, or push the logs into Elasticsearch.

       There are a growing set of components you can plug together to make your solution.

       Getting started is really easy - you can just use the "message-pass" command installed by the
       distribution. If you have a common config that you want to repeat, or you want to write your own server
       which does something more flexible than the normal script allows, then see Message::Passing::DSL.

       To dive straight in, see the documentation for the command line utility message-pass, and see the
       examples in Message::Passing::Manual::Cookbook.

       For more about how the system works, see Message::Passing::Manual::Concepts.

License

       GNU Library General Public License, Version 2.1

perl v5.32.1                                       2021-11-09                              Message::Passing(3pm)

Name

       Message::Passing - a simple way of doing messaging.

See Also

       Message::Passing::Manual - The manual (contributions cherished).
       <http://www.slideshare.net/bobtfish/messaging-interoperability-and-log-aggregation-a-new-framework> -
       Slide deck!
       Log::Message::Structured - For creating your log messages.
       Log::Dispatch::Message::Passing - use Message::Passing outputs from Log::Dispatch.

Sponsorship

       This  module exists due to the wonderful people at Suretec Systems Ltd.  <http://www.suretecsystems.com/>
       who sponsored its development for its VoIP division called SureVoIP <http://www.surevoip.co.uk/> for  use
       with the SureVoIP API - <http://www.surevoip.co.uk/support/wiki/api_documentation>

Support

Bugs
       Please log bugs at rt.cpan.org. Each distribution has a bug tracker link in its metacpan.org page.

   Discussion
       #message-passing on irc.perl.org.

   Sourcecode
       Source code for all modules is  available  at  <http://github.com/suretec>  and  forks/patches  are  very
       welcome.

Synopsis

           message-pass --input STDIN --output STDOUT
           {"foo": "bar"}
           {"foo":"bar"}

This Module

       This is a simple MooX::Options script, with one input, one filter and  one  output.  To  build  your  own
       similar scripts, see:

       Message::Passing::DSL - To declare your message chains.
       Message::Passing::Role::CLIComponent - To provide "foo" and "foo_options" attribute pairs.
       Message::Passing::Role::Script - To provide daemonization features.

   METHODSbuild_chain

       Builds and returns the configured chain of input => filter => output.

       start

       Class  method  to call the run_message_server function with the results of having constructed an instance
       of this class, parsed command line options and constructed a chain.

       This is the entry point for the script.

See Also