Kafunk
MassTransit
Kafunk | MassTransit | |
---|---|---|
1 | 19 | |
159 | 6,550 | |
- | 1.4% | |
1.7 | 9.4 | |
- | 6 days ago | |
F# | C# | |
- | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Kafunk
-
Walmart is migrating the remaining F# code into Java
Performance.
Generally speaking, F# was actually very fast, and had nice concurrency support, but there were times that wasn't the case.
For example, in 2016 I was part of the initiative to rewrite the ad feed. We had to read in several Kafka topics, do some joining on our end, and emit to a separate Kafka topic. This isn't terribly hard to write, but we were dealing on the order of about ~100gb of data being pushed into memory. This is hardly "big data" stuff, but it's enough to highlight some issues.
Specifically, the built F# persistent map structure was simply too slow to get the performance we wanted. I really like that structure, it's really handy and nice, but I ended up having to make heavy use of the ConcurrentDictionary that was built into .NET. This wasn't that hard or anything, but it made me a little sad that I had to move to a mutable store to get the performance I needed.
There was also the fact that the `async` monad, while generally very good and useful, had bizarre bottlenecks that were hard to measure. It was difficult to know when the async task was actually started, and when you tried to measure performance bottlenecks you were really only measuring the scheduler, not the actual performance. This isn't really F#'s fault, this is an issue with any kind of cooperative scheduling system, but occasionally to get the performance we needed we'd have to move to lower level threads instead of the pretty monadic stuff. Microsoft eventually released the Task monad which generally performed a bit better.
There were other things here and there; the Kafka client libraries for .NET simply aren't as good as the Java ones. Jet actually open-sourced their own (https://github.com/jet/kafunk) which did make it a bit more functional and nice, but it had performance issues as well, so a lot of us ended up using Confluent.
There were little annoyances specific to F# as well; there's no real concept of a monad transformer, so if you wanted to do something like, for example, combine an Option and an Async into generalized syntax, you'd have to write your own wrapper monad thing, which wasn't that hard but was sort of ad hoc.
The general rule of thumb was that the first draft of software, we would try and keep as functional and pretty. If that was too slow, we allowed mutation but only within a function. If that was too slow, we'd allow global mutation but only with thread-safe stuff.
MassTransit
-
Easy to use library for RabbitMQ in dotnet core.
What would be the benefits of using your library instead of something like MassTransit?
- Consistência de dados e padrão Outbox
-
MassTransit with MSMQ vs RabbitMQ
However, I found this discussion on MT github: https://github.com/MassTransit/MassTransit/discussions/2546
-
Agnostic Messaging Provider - Azure/Google/AWS
MassTransit (https://github.com/MassTransit/MassTransit)
-
What's the deal with "hosts" in console applications now?
I really like https://masstransit-project.com/. I use it with both RabbitMQ and Azure Service Bus
-
📦 Data consistency, outbox pattern and idempotency in a microservice architecture
There are many libraries in .NET that helps you implementing the outbox pattern like: MassTransit, NServiceBus, CAP. Talking about idempotency, a special mention to a specific lib from a big friend that runs on top of CAP which is called Ziggurat.
- Do I need message queues for sending emails/texts via services like SendGrid, AWS SES, Twilio etc.? How do you decide if you need message queues or not? What questions do you ask yourself?
-
Best .net open source microservice based project?
I actually found the MassTransit samples really enlightening. https://masstransit-project.com/
-
Hello my company is trying to port from PHP to C#. Currently we want to port worker an example you execute cli command which is long running command which consumes messages from Rabbit Mq. How do you suggest that we do it in Dotnet way?
https://masstransit-project.com/ - Mass Transit might help, it's designed to make handling messages in .net easier and supports Rabbit Mq - might be worth a look
-
.NET application stuck and on processing bus messages because of possible other activity in the console app? How can I debug?
Look into IHostedService or use something like MassTransit
What are some alternatives?
NetMQ - A 100% native C# implementation of ZeroMQ for .NET
Rebus - :bus: Simple and lean service bus implementation for .NET
Hangfire - An easy way to perform background job processing in .NET and .NET Core applications. No Windows Service or separate process required
EasyNetQ - An easy to use .NET API for RabbitMQ
RawRabbit - A modern .NET framework for communication over RabbitMq
CAP - Distributed transaction solution in micro-service base on eventually consistency, also an eventbus with Outbox pattern
RabbitMQ.NET - RabbitMQ .NET client for .NET Standard 2.0+ and .NET 4.6.2+
dapr - Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
NServiceBus - Build, version, and monitor better microservices with the most powerful service platform for .NET