https://github.com/maps-messaging/mapsmessaging_server
MapsMessaging server supports the standard IoT protocols out of the box and enables server to server comms, plus filtering across all protocols
https://github.com/maps-messaging/mapsmessaging_server
amqp canbus-communications interoperability iot jms lora-gateway mavlink mqtt mqtt-server mqtt-sn mqtt5 mqttws31 multi-adapter nmea2000 promise protocol-standards protocols stomp stompwebsocket
Last synced: 19 days ago
JSON representation
MapsMessaging server supports the standard IoT protocols out of the box and enables server to server comms, plus filtering across all protocols
- Host: GitHub
- URL: https://github.com/maps-messaging/mapsmessaging_server
- Owner: Maps-Messaging
- License: apache-2.0
- Created: 2020-12-16T04:59:42.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2026-04-28T01:08:30.000Z (about 1 month ago)
- Last Synced: 2026-04-29T02:36:20.385Z (about 1 month ago)
- Topics: amqp, canbus-communications, interoperability, iot, jms, lora-gateway, mavlink, mqtt, mqtt-server, mqtt-sn, mqtt5, mqttws31, multi-adapter, nmea2000, promise, protocol-standards, protocols, stomp, stompwebsocket
- Language: Java
- Homepage: https://mapsmessaging.io
- Size: 16 MB
- Stars: 19
- Watchers: 1
- Forks: 2
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
# MAPS Messaging Server
[MAPS (Multi Adapter and Protocol Standards) Messaging Server](https://www.mapsmessaging.io/) addresses the complexities of IoT communication by supporting a wide range of protocols, ensuring compatibility and future-proof integration.
## Introduction
Wire protocol standardization has promised interoperability and flexibility in IoT messaging. However, with the evolution of protocols, achieving this seamless interoperability has become challenging. MAPS Messaging Server bridges this gap by providing comprehensive support for multiple protocols and their versions, thus facilitating a unified messaging fabric.
## Features
- **Wide Protocol Support:** For a full list, see [supported protocol versions](https://docs.mapsmessaging.io/docs/intro#supported-protocols).
- **Inter-Server Communication:** Directly publish or subscribe to data on other messaging servers. [Learn more](https://docs.mapsmessaging.io/docs/integrations/server/overview).
- **Advanced Filtering:** Utilize [JMS Selector](https://github.com/Maps-Messaging/jms_selector_parser) for fine-grained message control.
- **Extensibility:** Easily integrate new or proprietary protocols.
- **Payload Transformation:** Configurable translations, such as XML to [JSON](https://github.com/Maps-Messaging/mapsmessaging_server/tree/main/src/main/java/io/mapsmessaging/api/transformers).
- **Namespace Partitioning:** Distinct namespaces for users and groups to enhance security.
- **Comprehensive Management:** JMX, JMX - RestAPI via [Jolokia](https://jolokia.org/)
- **RestAPI Management:** Simple interface to manage connections, destinations, and schemas.
## Advanced Features
- **Schema Repository:** Centralized management for data integrity and format consistency. [More info](https://github.com/Maps-Messaging/schemas).
- **Direct Device Integration:** Offers direct communication with I2C, 1-Wire, and SPI devices, mapping interactions to topic namespaces. [More info](https://github.com/Maps-Messaging/device_integration)
- **Versatile Authentication:** Supports a variety of mechanisms, including `.htpasswd`, LDAP, JWT, Auth0, and more. [More info](https://github.com/Maps-Messaging/authentication_library)
- **Cloud-Native Event Storage:** Event data at rest can be pushed to S3 buckets for long-term storage. [More info](https://github.com/Maps-Messaging/dynamic_storage)
- **Event Filtering:** Advanced filtering between MAPS-servers or other servers with filtering capabilities, ensuring only relevant data is transmitted. [More info](https://github.com/Maps-Messaging/jms_selector_parser)
- **Robust Logging:** Utilizes Logback for comprehensive and customizable logging configurations. [More info](https://github.com/Maps-Messaging/simple_logging)
- **Non-Blocking Async Engine:** Employs a highly efficient, non-blocking asynchronous engine and network layers, ensuring minimal locking and maximal concurrency for superior performance. [Learn more](https://github.com/Maps-Messaging/non_block_task_scheduler).
- **LoRa Support:** Native support for LoRa devices, enabling direct communication without requiring a LoRaWAN network.
- **Semtech Gateway Compatibility:** Acts as a LoRaWAN gateway in conjunction with Semtech's technology, expanding the server's IoT ecosystem.
- **mDNS Discovery:** Provides service discovery via mDNS, with future enhancements planned for automatic connection and namespace/schema propagation.
- **Security Domains:** Configurable security domains allow for tailored authentication and authorization on a per-adapter/protocol basis.
- **Flexible Configuration:** Supports configuration through both Consul and file-based setups, catering to various deployment environments.
## Getting Started: "Hello World" Example
This example demonstrates a simple publish/subscribe scenario using the MQTT protocol.
### Starting the Server
Make sure the server is running and listening for MQTT connections on port 1883 (default for MQTT).
### Producer: Sending a Message
```java
// Java-based pseudocode for an MQTT producer
MqttClient producer = new MqttClient("tcp://localhost:1883", "producer");
producer.connect();
MqttMessage message = new MqttMessage("Hello, World!".getBytes());
producer.publish("test/topic", message);
producer.disconnect();
```
### Consumer: Receiving a Message
```java
// Java-based pseudocode for an MQTT consumer
MqttClient consumer = new MqttClient("tcp://localhost:1883", "consumer");
consumer.connect();
consumer.subscribe("test/topic");
consumer.setMessageCallback((topic, msg) -> System.out.println(new String(msg.getPayload())));
// Keep the consumer running to listen for messages
```
Replace localhost with the server's IP address if running remotely. Ensure the topic names match in both producer and consumer.
## Contributing
We welcome contributions! Please refer to our contribution guidelines for how you can participate in making MAPS Messaging Server even better.
## License
The Maps Messaging Server is dual-licensed under the Mozilla Public License Version 2.0 (MPL 2.0) and the Apache License 2.0 with Commons Clause License Condition v1.0.
Under the MPL 2.0 license, the software is provided for use, modification, and distribution under the terms of the MPL 2.0.
Additionally, the "Commons Clause" restricts the selling of the software, which means you may not sell the software or services whose value derives entirely or substantially from the software's functionality.
For full license terms, see the [LICENSE](LICENSE) file in the repository.
## Library and Server Build and Release Status
| Library Name | Buildkite Build Status | SonarQube Quality Status |
|------------------------------------------|---------------------|---------------------|
| Authentication & Authorisation Framework | [](https://buildkite.com/mapsmessaging/040-authentication-and-authorisation-library-snapshot-build)| [](https://sonarcloud.io/summary/new_code?id=Authentication_Library) |
| Configuration Framework | [](https://buildkite.com/mapsmessaging/030-configuration-library-snapshot-build)| [](https://sonarcloud.io/summary/new_code?id=Configuration_Library) |
| Device Integration Framework | [](https://buildkite.com/mapsmessaging/040-device-library-snapshot-build) | [](https://sonarcloud.io/summary/new_code?id=deviceLibrary) |
| Dynamic Storage Framework | [](https://buildkite.com/mapsmessaging/040-dynamic-storage-snapshot-build) | [](https://sonarcloud.io/summary/new_code?id=dynamic_storage) |
| JMS Selector | [](https://buildkite.com/mapsmessaging/010-jms-selector-library-snapshot-build) | [](https://sonarcloud.io/summary/new_code?id=Maps-Messaging_jms_selector) |
| Logging Framework | [](https://buildkite.com/mapsmessaging/010-logging-framework-snapshot-build) | [](https://sonarcloud.io/summary/new_code?id=Simple_Logging) |
| Naturally Ordered Structures Framework | [](https://buildkite.com/mapsmessaging/010-natural-ordered-long-collection-snapshot-build) | [](https://sonarcloud.io/summary/new_code?id=Naturally_Ordered_Long_Collections) |
| Schema Framework | [](https://buildkite.com/mapsmessaging/020-schema-library-snapshot-build) | [](https://sonarcloud.io/summary/new_code?id=Schemas) |
| Task Scheduler | [](https://buildkite.com/mapsmessaging/020-non-blocking-task-scheduler-snapshot-build) | [](https://sonarcloud.io/summary/new_code?id=Non_Blocking_Task_Scheduler) |
| Messaging Server | [](https://buildkite.com/mapsmessaging/090-server-snapshot-build)| [](https://sonarcloud.io/summary/new_code?id=Maps-Messaging_mapsmessaging_server)|
| Web Admin Client | [](https://buildkite.com/mapsmessaging/060-maps-web-client)| [](https://sonarcloud.io/summary/new_code?id=web-admin-client)|
[](https://wiki.mutable.ai/Maps-Messaging/mapsmessaging_server)