C++ Message Queuing Library and Framework
Release | Version | Docs |
---|---|---|
stable |
API, Book | |
testing |
Book |
Find all FairMQ releases here.
FairMQ is designed to help implementing large-scale data processing workflows needed in next-generation Particle Physics experiments. FairMQ is written in C++ and aims to
- provide an asynchronous message passing abstraction of different data transport technologies,
- provide a reasonably efficient data transport service (zero-copy, high throughput),
- be data format agnostic, and
- provide basic building blocks that can be used to implement higher level data processing workflows.
The core of FairMQ provides an abstract asynchronous message passing API with scalability protocols
inspired by ZeroMQ (e.g. PUSH/PULL, PUB/SUB).
FairMQ provides multiple implementations for its API (so-called "transports",
e.g. zeromq
, shmem
and ofi
(in development)) to cover a variety of use cases
(e.g. inter-thread, inter-process, inter-node communication) and machines (e.g. Ethernet, Infiniband).
In addition to this core functionality FairMQ provides a framework for creating "devices" - actors which
are communicating through message passing. FairMQ does not only allow the user to use different transport but also to mix them; i.e: A Device can communicate using different transport on different channels at the same time. Device execution is modelled as a simple state machine that
shapes the integration points for the user task. Devices also incorporate a plugin system for runtime configuration and control.
Next to the provided devices and plugins (e.g. DDS)
the user can extend FairMQ by developing his own plugins to integrate his devices with external
configuration and control services.
FairMQ has been developed in the context of its mother project FairRoot - a simulation, reconstruction and analysis framework.
Recommended:
git clone https://github.com/FairRootGroup/FairMQ fairmq_source
cmake -S fairmq_source -B fairmq_build -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=fairmq_install
cmake --build fairmq_build
cmake --build fairmq_build --target test
cmake --build fairmq_build --target install
Please consult the manpages of your CMake version for more options.
If dependencies are not installed in standard system directories, you can hint the installation location via -DCMAKE_PREFIX_PATH=...
or per dependency via -D{DEPENDENCY}_ROOT=...
. {DEPENDENCY}
can be GTEST
, BOOST
, FAIRLOGGER
, ZEROMQ
, OFI
, PMIX
, ASIO
, ASIOFI
or DDS
(*_ROOT
variables can also be environment variables).
FairMQ ships as a CMake package, so in your CMakeLists.txt
you can discover it like this:
find_package(FairCMakeModules 0.2 REQUIRED)
include(FairFindPackage2)
find_package2(FairMQ)
find_package2_implicit_dependencies()
The FairFindPackage2
module is part of the FairCMakeModules
package.
If FairMQ is not installed in system directories, you can hint the installation:
list(PREPEND CMAKE_PREFIX_PATH /path/to/fairmq_install)
Optionally, you can require certain FairMQ package components and a minimum version:
find_package(FairMQ 1.4.0 COMPONENTS dds_plugin)
When building FairMQ, CMake will print a summary table of all available package components.
- asio (optionally bundled)
- asiofi
- Boost
- CMake
- DDS
- Doxygen
- FairCMakeModules (optionally bundled)
- FairLogger
- GTest (optionally bundled)
- PMIx
- ZeroMQ
Which dependencies are required depends on which components are built.
Supported platforms: Linux and MacOS.
On command line:
-DDISABLE_COLOR=ON
disables coloured console output.-DBUILD_TESTING=OFF
disables building of tests.-DBUILD_EXAMPLES=OFF
disables building of examples.-DBUILD_OFI_TRANSPORT=ON
enables building of the experimental OFI transport.-DBUILD_DDS_PLUGIN=ON
enables building of the DDS plugin.-DBUILD_PMIX_PLUGIN=ON
enables building of the PMIx plugin.-DBUILD_DOCS=ON
enables building of API docs.- You can hint non-system installations for dependent packages, see the #installation-from-source section above
After the find_package(FairMQ)
call the following CMake variables are defined:
Variable | Info |
---|---|
${FairMQ_PACKAGE_DEPENDENCIES} |
the list of public package dependencies |
${FairMQ_<dep>_VERSION} |
the minimum <dep> version FairMQ requires |
${FairMQ_<dep>_COMPONENTS} |
the list of <dep> components FairMQ depends on |
${FairMQ_PACKAGE_COMPONENTS} |
the list of components FairMQ consists of |
${FairMQ_#COMPONENT#_FOUND} |
TRUE if this component was built |
${FairMQ_VERSION} |
the version in format MAJOR.MINOR.PATCH |
${FairMQ_GIT_VERSION} |
the version in the format returned by git describe --tags --dirty --match "v*" |
${FairMQ_PREFIX} |
the actual installation prefix |
${FairMQ_BINDIR} |
the installation bin directory |
${FairMQ_INCDIR} |
the installation include directory |
${FairMQ_LIBDIR} |
the installation lib directory |
${FairMQ_DATADIR} |
the installation data directory (../share/fairmq ) |
${FairMQ_CMAKEMODDIR} |
the installation directory of shipped CMake find modules |
${FairMQ_BUILD_TYPE} |
the value of CMAKE_BUILD_TYPE at build-time |
${FairMQ_CXX_FLAGS} |
the values of CMAKE_CXX_FLAGS and CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE} at build-time |