Horse Messaging is a communcation framework. It provides many features. All features can be used over only once client and one connection full asynchronously.
- Push State Messaging Queues (supports persistent queues)
- Pull State Messaging Queues (supports persistent queues)
- Message Broadcasting over Channels
- Distributed Cache Management
- Direct Messaging Between Clients
- Proxy for Request and Response Messaging
- Remote Transactions
- Event Management
- Message Routing
-
First of all, Horse Messaging is a framework, not an application. That gives you unlimited customization opportunity. Horse Messaging Server provides you many many implementation options to customize everything in it. On the other hand, if you want to use Horse Messaging Server with default implementations, you can create very basic application with a few lines of code.
-
It's a complete communication framework. It's a bridge between your applications. It's not just messaging queue or cache server. Horse gives you unlimited communication possibilities. You can use all kind of messaging architectures with same code base.
-
It's extremely extensible and customizable. Everything has an implementation and all operations are interceptable. You can even use your custom SQL server to make your queues durable.
-
It's fast, uses low memory and cpu. Queues can handle over 200k messages per second, Channels can handle over 350k messages per second. There is no delay in Horse, latency depends on your network connection.
-
C#/.NET Core-Powered Optimized. for cloud-native and on-prem environments.
-
Resilient & Fault-Tolerant. Ensures stability even under extreme workloads.
-
Open-Source & Developer-Friendly. Encouraging innovation and collaboration.
-
Scalable & Cost-Effective. Ideal for large-scale deployments with minimal infrastructure costs.
-
Powerful Server-Side Customization. Through interface-based implementations, Horse provides extreme flexibility for customization on the server side, a feature none of the other tools offer.
-
Client-to-Client Direct Communication. Unlike any other tool, Horse enables direct client-to-client communication without requiring a queue or pub/sub mechanism.
Feature | Horse | Rabbit MQ | Kafka | Redis |
---|---|---|---|---|
Messaging Queues | - Push and Pull state queues - Distribute, Round Robin, Only First algorithms - Same client publisher/consumer - Same client multiple queues - Memory & Persistent Queues - Priority and regular messages in same queues - Custom Persistence implementation - Custom algorithms supported - Publishing to routers supports multiple algorithms - Advanced Commit options - FIFO guarantee - At Most Once, At Least Once, Exactly Once - Advanced Acknowledge options - Semi-Efficient message batching - Multiple put back solutions for unacked messages - Multiple auto destroy options - Message TTL and Acknowledge timeouts - Allowed maximum consumer management - Message and size management - Delaying between consume operations management - Advanced status management (run, pause, only push, only consume) - Clear and Move all messages - Low consumer latency - Up to 180k msg/sec on each memory queue - Up to 140k msg/sec on each persistent queue |
- Only Push states queues - Many queue types for memory/persistence and auto destroy operations such as Durable, Exclusive, Transient. - Advanced Acknowledge options - Moving messages with dead lettering - Message TTL - Queue Limits - FIFO guarantee - At Most Once, At Least Once - Inefficient message batching - Consumer prefetch management - Priority queues - Delayed messages - Low consumer latency - Up to 55k msg/sec on each persistent queue (with 15 secs spike for each a few min) |
- Only Pull state queues - Distributing messages into partitions in different servers - FIFO guaranteed only in same partitions - Consumer groups - Message retentions - Only persistent - Key based partitioning - Message offset management - Compressions - Efficient message batching - Each client can subscribe to only one topic - High throughput & low latency or up to 1 second consume latency - At Most Once, At Least Once, Exactly Once - Performance based on network speed instead of message count and it’s up to server’s network speed. |
Not Supported |
Channels & Pub/Sub | - Extremely low latency - Subscriber initial messages - Subscriber management - Unlimited channel subscription for each client - Auto create / destroy options - Client and Message Size limits - Topic bindings - Nearly 1M messages for each channel |
Not Supported | Not Supported | - Extremely low latency - Auto create / destroy - Wildcard subscription |
Client Management | Fully supported, any client with permissions can monitor and manage others | Not Supported | Limited monitoring of Admin Clients | Not Supported |
Distributed Caching | - Get, Set, Refresh, TTL - Soft & Hard TTL Management - Alerts to receivers for expirations - Incremental cache values for rate limiting solutions - Category tagging - String and Binary support. - Over 1M op/sec. |
Not Supported | Not Supported | - Get, Set, Refresh, TTL - Advanced TTL Management - Incremental cache values for rate limiting solutions ● Category tagging. - Advanced category and type management. - String and Binary support. - Cache Persistence - Over 3M op/sec |
Client Messaging | - Client can send messages each other - Client can send messages to a group of clients with type and name - Clients and sends requests and waits for response - Client messaging can be managed with different algorithms (send all, only one, only first etc.) |
Supported only over queues with the same algorithm messaging queues. | Not Supported | Not Supported |
Routers | - Distribute, Round Robin and Only First options - You can route messages with different targets in same route; Queue, Topic, Dynamic, Client, even HTTP Request to external API - Binding priority management - Binding interaction options |
- Supported in only queues with Exchanges - Multiple algorithms supported such as Fanout, Direct |
Not Supported | Not Supported |
Client Supports | C#, Java, Python, Javascript | C#, Java, Python, Javascript, PHP, Ruby, Go, C/C++, Elixir, Erlang |
C#, Java, Python, Javascript, Go, C/C++, Ruby, Scala |
C#, Java, Python, Javascript, PHP, Go, Ruby, C/C++, Rust |
Customization | Unlimited, can you develop your own plugins and intercept everything on both server and client side | Has some useful plugins and may be developed | Not explicitly supported some solutions might be found | LUA Scripting on server side |
Overall | Powerful, Flexible, Efficient, Feature Rich, All in One | Flexible, Feature Rich, may require more resources (especially RAM) | Powerful, Strict, Efficient | Powerful, Limited use cases, Efficient |
1. Financial Transaction Processing in Payment Systems
Horse can be used as a Message Broker in online payment systems for processing transactions, confirmations, and notifications to users. In this scenario:
- Transactions are sent as messages to Horse from different systems.
- Horse forwards these messages to other systems like payment gateways, banking systems, or payment platforms.
- The features of remote transactions and message routing are used for coordinating between multiple services.
2. Complex Event Management (Event-Driven Architectures)
In systems relying on Event-Driven Architectures, Horse can be used to manage events. For example:
- In an e-commerce system, events such as "order placed," "payment successful," "item shipped," etc., are sent as messages to Horse.
- Horse forwards these events to various systems (like inventory, shipping, customer service) for further processing.
- The event management and message broadcasting features are used to broadcast events simultaneously to different systems.
3. Messaging Platforms and Communication Systems
In messaging platforms like SMS or chat systems, Horse can be used as a Message Broker to send messages simultaneously to thousands or millions of users:
- Messages are broadcast from a single source to thousands of destinations using message broadcasting.
- The message delivery quality and persistent queues ensure the reliable sending of messages even during network issues.
- Direct messaging or proxy messaging is available for special cases requiring authentication or filtering.
4. Data Management in Microservices Systems
In a microservices architecture, where multiple independent services are connected, Horse can be used as a Message Broker for sending data and coordinating between services:
- Each service can independently send data via messages to other services.
- Horse allows easy scaling of this message exchange, handling large numbers of services with its scalability and flexibility.
- Message routing ensures that messages are delivered to the correct service while maintaining high performance.
5. Notification and Alert Systems
In notification and alert systems, like monitoring systems, Horse can be used to send alerts and notifications to system admins and users:
- Whenever a critical event or alert occurs in the system, the message is sent to Horse.
- Horse forwards the message to multiple recipients (via email, SMS, or apps) simultaneously.
- Event management and message broadcasting are used to quickly send these alerts to the relevant parties.
6. IoT (Internet of Things) Systems
In IoT systems, where devices and sensors continuously generate data, Horse can be used to manage messages and data between devices and central servers:
- Data generated by sensors is sent to Horse.
- Horse forwards the messages to data processing, analytics, or storage systems.
- The event management and distributed cache management features are used to store and quickly access data.
7. Multi-Layered System Development and Interoperability
In a multi-layered system where multiple modules (e.g., databases, various services, and analytics systems) need to interact, Horse can act as the communication bridge between them:
- Each module can send messages to Horse, which then forwards them to other modules or services.
- This process ensures reliable message delivery through persistent queues and maintains operation even when certain systems are temporarily unavailable.
Install and run basic server application
docker run -p 2626:2626 -p 2627:2627 horseframework/messaging-server
Create new .NET Core project and add Horse.Messaging.Client nuget package into your project.
HorseClient client = new HorseClient();
await client.ConnectAsync("horse://localhost:2626");
Navigate to Jockey panel http://localhost:2627 with empty username and password. You can see your connected client in clients page.