![]() It’s worth noting, however, that across process boundaries Akka.NET developers often use AtLeastOnceDelivery actors in Akka.Persistence to make delivery state durable and resilient to network failures. This is because the vast majority of messages in Akka.NET are passed in-memory between actors running locally in the same processes, thus reliability guarantees stronger than “at most once” delivery (the simplest and least expensive delivery option) aren’t needed very often. There are some other differences between message distribution tools like Kafka and Akka.NET that are worth noting:Īkka.NET doesn’t persist or guarantee delivery of messages by default whereas Kafka, RabbitMQ, and other technologies typically do. You could, however, build a stand-alone system that runs entirely on Akka.NET and uses Akka.Remote / Akka.Cluster to carry out all of the message distribution between different parts of the system AND all of the message production and processing needed to complete the work. ![]() This is the fundamental difference - you can’t build an application using Kafka on its own as there would be nothing to produce or consume the messages. Akka.Remote’s default message delivery mechanism relies on a single TCP connection between two remote processes. ![]() ![]() Where the confusion occurs, however, is because Akka.NET actors also have built-in transports - the IActorRef, the “actor reference,” used to send messages to an actor can deliver messages via in-memory messaging to other actors running locally inside the same process or to actors running in remote process via Akka.Remote. Where Akka.NET differs: Akka.NET actors are fundamentally message processing and message producing technologies.Īkka.NET actors are responsible for managing business state or executing commands, both of which occur when an actor receives a message. Only in delivering and routing these messages from their sources and to their destinations. Message distribution systems are transports - they aren’t involved in the act of creating or consuming messages. The manner in which they distribute messages varies and for our purposes those differences are totally immaterial (sorry, vendors.) The point is: producers write messages into these systems and the goal is, with varying degrees of reliability, concurrency, and asynchrony, to distribute these messages for processing to one or more downstream consumers. Message brokers, enterprise message buses, message queues, event hubs, and so on - for the sake of simplicity, which I’m certain will enrage developers in some corners of the Internet, I’m going to lump these technologies together into a single category: these are message distribution systems. Differences between Akka.NET, Kafka, RabbitMQ, and Other Messaging Systems I’m going to cover that in some more detail in this post because it’s a common question asked by many developers who are just starting to look into Akka.NET. ![]() NET and not Kafka / RabbitMQ? What's the differences between these two pieces of technology? Can they be used together? Or are they competing technologies?- Aaron Stannard January 29, 2019 A while back I created a thread on Twitter to attempt to explain the difference between Akka.NET and some other popular message-distribution and queuing technologies, such as Apache Kafka and RabbitMQ.Ĭommon question I get from users who are just starting to look at : why use something like Akka. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |