![Milan Jovanović](/img/default-banner.jpg)
- Видео 549
- Просмотров 9 073 731
Milan Jovanović
Сербия
Добавлен 22 окт 2017
Hi there, my name is Milan, and welcome to my RUclips channel! 👋
My goal with this channel is to share my .NET and C# knowledge with you. I make videos about software engineering and software architecture, distributed systems, Domain-Driven Design, and any software-related topic I find interesting.
My goal with this channel is to share my .NET and C# knowledge with you. I make videos about software engineering and software architecture, distributed systems, Domain-Driven Design, and any software-related topic I find interesting.
How To Implement Distributed Tracing for Microservices With Jaeger
Join a community of 1000+ .NET developers: www.patreon.com/milanjovanovic
Master the Clean Architecture: bit.ly/3PupkOJ
The ultimate Modular Monolith blueprint: bit.ly/3SXlzSt
So you build a Microservices system, but how will you monitor what's happening inside?
This is where Observability comes in. Understanding how requests flow through your system is crucial for debugging and performance optimization. OpenTelemetry is an open-source observability framework that makes this possible. Combine this with a distributed tracing platform like Jaeger, and you will have an excellent observability system. In this video, I'll show you how to implement this step-by-step.
Check out my courses:
www.milanj...
Master the Clean Architecture: bit.ly/3PupkOJ
The ultimate Modular Monolith blueprint: bit.ly/3SXlzSt
So you build a Microservices system, but how will you monitor what's happening inside?
This is where Observability comes in. Understanding how requests flow through your system is crucial for debugging and performance optimization. OpenTelemetry is an open-source observability framework that makes this possible. Combine this with a distributed tracing platform like Jaeger, and you will have an excellent observability system. In this video, I'll show you how to implement this step-by-step.
Check out my courses:
www.milanj...
Просмотров: 4 958
Видео
The Best Way To Implement Soft Deletes With EF Core (and why you shouldn't)
Просмотров 9 тыс.13 часов назад
Join a community of 1000 .NET developers: www.patreon.com/milanjovanovic Master the Clean Architecture: bit.ly/3PupkOJ The ultimate Modular Monolith blueprint: bit.ly/3SXlzSt To delete or not to delete, that is the question (pun intended). The traditional way to remove information in a database is through a "hard delete." A hard delete permanently erases a record from the database table. While ...
This Is What MassTransit Does to Your Message Broker | RabbitMQ
Просмотров 7 тыс.20 часов назад
Join a community of 1000 .NET developers: www.patreon.com/milanjovanovic Master the Clean Architecture: bit.ly/3PupkOJ The ultimate Modular Monolith blueprint: bit.ly/3SXlzSt How does MassTransit integrate with your message broker? In this video, I'll explain how MassTransit connects with RabbitMQ. We'll discuss exchanges, bindings, and queues. I'll also show you how to implement the producer-c...
Completely Get Rid of Exceptions Using This Technique
Просмотров 17 тыс.День назад
Get the source code for this video for FREE → the-dotnet-weekly.ck.page/rop Join a community of 1000 .NET developers: www.patreon.com/milanjovanovic Accelerate your Clean Architecture skills: bit.ly/3PupkOJ Master the Modular Monolith Architecture: bit.ly/3SXlzSt C# is an object-oriented language with many functional features built in. Functional programming is a fantastic paradigm that I belie...
Adding JWT Authentication in ASP.NET Core With Supabase Auth
Просмотров 6 тыс.14 дней назад
Adding JWT Authentication in ASP.NET Core With Supabase Auth
EF Core Migrations Deep Dive, Applying Migration, SQL Scripts
Просмотров 11 тыс.14 дней назад
EF Core Migrations Deep Dive, Applying Migration, SQL Scripts
Master Claims Transformation for Flexible JWT Auth in ASP.NET Core
Просмотров 10 тыс.21 день назад
Master Claims Transformation for Flexible JWT Auth in ASP.NET Core
Master the Fluent Builder Design Pattern in C#
Просмотров 23 тыс.21 день назад
Master the Fluent Builder Design Pattern in C#
What Is the Fastest Way To Do a Bulk Insert? Let’s Find Out
Просмотров 10 тыс.28 дней назад
What Is the Fastest Way To Do a Bulk Insert? Let’s Find Out
The Best Way to Implement Long Running Tasks in .NET - Hangfire, Blazor, SignalR
Просмотров 11 тыс.Месяц назад
The Best Way to Implement Long Running Tasks in .NET - Hangfire, Blazor, SignalR
How to design great Aggregate Roots in Domain-Driven Design
Просмотров 10 тыс.Месяц назад
How to design great Aggregate Roots in Domain-Driven Design
A practical introduction to OpenTelemetry for .NET developers (+ Aspire Dashboard)
Просмотров 10 тыс.Месяц назад
A practical introduction to OpenTelemetry for .NET developers ( Aspire Dashboard)
Data isolation for Modular Monoliths - DB Schemas, EF Core
Просмотров 7 тыс.Месяц назад
Data isolation for Modular Monoliths - DB Schemas, EF Core
Implementing the Transactional Outbox pattern with Hangfire
Просмотров 10 тыс.Месяц назад
Implementing the Transactional Outbox pattern with Hangfire
Creating a State Machine Saga With MassTransit (Orchestrated Saga)
Просмотров 9 тыс.Месяц назад
Creating a State Machine Saga With MassTransit (Orchestrated Saga)
Authentication made easy with ASP.NET Core Identity in .NET 8
Просмотров 31 тыс.Месяц назад
Authentication made easy with ASP.NET Core Identity in .NET 8
Simple File API Using Azure Blob Storage (running locally)
Просмотров 7 тыс.Месяц назад
Simple File API Using Azure Blob Storage (running locally)
Implementing Modular Architecture With Sync Communication
Просмотров 7 тыс.2 месяца назад
Implementing Modular Architecture With Sync Communication
The Beginner's Guide to Clean Architecture
Просмотров 19 тыс.2 месяца назад
The Beginner's Guide to Clean Architecture
Modular Monolith - How To Create Your Modules
Просмотров 11 тыс.2 месяца назад
Modular Monolith - How To Create Your Modules
Automatically Register Minimal APIs in ASP.NET Core | REPR Pattern
Просмотров 12 тыс.2 месяца назад
Automatically Register Minimal APIs in ASP.NET Core | REPR Pattern
I made $100,000+ freelancing on Upwork. This is how
Просмотров 21 тыс.2 месяца назад
I made $100,000 freelancing on Upwork. This is how
I tried coding with Amazon CodeWhisperer... This is what happened
Просмотров 37 тыс.2 месяца назад
I tried coding with Amazon CodeWhisperer... This is what happened
Bulletproof Your Software Architecture With ArchUnitNET
Просмотров 8 тыс.2 месяца назад
Bulletproof Your Software Architecture With ArchUnitNET
The Best .NET REST API Client You Didn't Know About
Просмотров 20 тыс.2 месяца назад
The Best .NET REST API Client You Didn't Know About
Lightweight In-Memory Message Bus Using .NET Channels
Просмотров 10 тыс.2 месяца назад
Lightweight In-Memory Message Bus Using .NET Channels
Amazon Cognito Token Authentication in ASP.NET Core With JWT
Просмотров 42 тыс.3 месяца назад
Amazon Cognito Token Authentication in ASP.NET Core With JWT
Clean Architecture: Understand the Presentation Layer's Purpose
Просмотров 7 тыс.3 месяца назад
Clean Architecture: Understand the Presentation Layer's Purpose
The Best Way to Run Integration Tests in Your CI/CD Pipeline
Просмотров 10 тыс.3 месяца назад
The Best Way to Run Integration Tests in Your CI/CD Pipeline
The Right Way To Use Scoped Services From Singletons in ASP.NET Core
Просмотров 9 тыс.3 месяца назад
The Right Way To Use Scoped Services From Singletons in ASP.NET Core
why not create the ValueObjects as Records?
So .Net Aspire can't kill docker-compose and open telemetry?))
Awesome!! Love to see the channel! ❤
two interesting things i learned from your videos. 1. Vertical Slice architecture 2. Railway-oriented programming
Very nice! Microsoft strikes again
Full video please
So no other manual configs reauired with this?
Edit: Nice video, learned a lot new topics ❤ By the way as of now I'm using "apigee" in production for api Tracing 😮
What is the benefit of integration event that contains only the Id of the aggregate since it notifies other parts of distributed system. And what is implication for integration event that it should contain only primitive values? For me it is enough that integration event is serializable to some data for that can be transferred to the other parts of the system.
So there is no longer Polly needed?
Surprise, surprise - this uses Polly under the hood :) Even though it's a MSFT library
😂
@@MilanJovanovicTech yeah, I get this, but I mean, should I use Polly explicitly or that approach with built-in functionality?
@@vitaliishmidt3704 yeah, Polly is actually usefull because you can you use it for a lot of different goals, for example for your file system handling
@@vitaliishmidt3704 good question
ty for the subtitles <3
Sure thing :)
Hi Milan, I need help with something. There is a web api project written using .net 8 cqrs mediatr pattern. We want to show notifications to users using Masstransit and rabbitmq. Don't get me wrong, I don't want push notifications. For example, a user receives an approval request, we will send it to the queue via rabbitmq, the react side will also listen and the icon will light up in the notification section like toastr, indicating that you have a notification. The problem is, how do we get it on a per-person basis? If we put it in a single queue, it will be visible to everyone. Whatever role he/she is assigned to, the men in that role should also appear in the notification. The queue should form accordingly. What solution would you suggest in this scenario?
Hello Milan! What can you say about the comparison between ELK and Jaeger in terms of distributed tracing? I know that there is Elastic APM, and it's possible to see database queries there (I believe that it's important if we talk about tracing). Additionally, in ELK, we can somehow achieve distributed logging.
That is a great and simple explanation. Thanks @Milan
How nice it is to watch when a person has good diction and understanding of the issue. He speaks competently. Thank you very much for your work.
Thanks a lot, I appreciate that! :)
Cool video, btw why did you use MSSQL for this?
I switch from MSSQL and PostgreSQL occasionally. No reason other than using something different.
For example I don't want to allow users to register, is there a way to hide/remove this endpoint?
Not out of the box
The issue I see with this is that with granular bounded contexts, most of the entities will be shared between features anyway.
True, you could organize by aggregates in that case
@@MilanJovanovicTech That's true, I usually do it in a technical folder tho' - Entities/Aggregate1, Aggregate2 etc
How does the Jaeger know that the message, after passing through RabbitMq, belongs to the same process?
Based on the data provided by OpenTelemetry. All these libraries integrate with OpenTelemetry. It uses unique IDs that are propagated between processes to associate spans into a distributed trace.
@@MilanJovanovicTech I was surprised that there is no single ID propagating through the whole process. Since there are several different IDs then Jaeger must remember them and search the IDs database to combine them eg: (service.instance.id-->messaging.masstransit.message_id-->service.instance.id). Am I thinking right? :)
@@piotrc966 the correct term is Trace Id. You can get that value from Activity.Current.TraceIdentifier (or something like that) RabbitMQ doesn't do that. It's MassTransit that includes the Trace ID in the operation. And also when consuming the message.
@@MilanJovanovicTech But just in Jaeger UI you don't see a single TraceId, or anything similar that would be constant throughout the process - hence the problem :). There are many different ID's. Hence my guess that Jaeger on the database of IDs it searches for correlation.
@@piotrc966 Check the URL: prnt.sc/JhoMFRm43hWu
Tack!
Tack själv! (hopefully that's a correct translation 😅)
Milan , thank you for great video. I'm curious to know, are you currently doing any freelancing or is content creation your only source of income? Also would you say that freelancing takes more or less time than regular 9-5 ?
Slowly stopped freelancing when I went full time into the content business. While freelancing, I could make my monthly wage as a senior engineer in Serbia in half the work hours. The tough part is finding work. Lots of competition these days.
When you do this you are no longer guaranteed that you'll get a consistent result. If something has changed that data between your two calls you'll get weird results.
What's the chance for that happening? And you can solve it with a transaction or FOR UPDATE / WITH UPDLOCK
@@MilanJovanovicTech if used incorrectly transaction isolation levels and locks like this can lead to deadlocks or simply not do want you want. It is a much more complex subject. Worth of 20 of such videos.
What is the difference between Azure app insights and jaeger
Cloud offering vs self-hosted tool. Jaeger requires manual deployment and setup.
would you use tracing in monolith or is it an overkill?
Considering how easy it is to setup, it can be worth it. The hosting costs shouldn't be too expensive either. One drawback could be reduced performance, as tracing does have a negative impact (although you can measure if it's drastic or not). All in all, yes - if I want more visibility into the system. Another thing to consider: is logging enough? Maybe, that's all I need.
very helpful, thanks Milan🔥🔥
You bet!
Hi MIlan... Im a great fan of your videos... i have a question.. do we really need mediatR in this case ? couldnt we instantiate the handler directly in the endpoint because the endpoint does only one thing anyway...
We don't - but it makes things easier when adding cross-cutting concerns. I actually recorded a simplified VSA video, which will release in about a week or two.
thanks a lot
Any time!
Awesome!
Thanks!
Fantastic video Milan
Thanks a lot! :)
Found problems imlementing this on my aggregate with nested soft delete entities collections in it. Quer filters are not going to solve my problems in this case
True. Collections make this quite a bit harder.
Could you please provide more information about data persistence in Jaeger?
This uses an in-memory storage by default. But you can plug in Cassandra or ElasticSearch. Check the docs for more info: www.jaegertracing.io/docs/1.58/deployment/#span-storage-backends
Why is there a Bavarian gopher in the thumbnail?
That's the Jaeger logo 😁
Excellent content! What theme do you use in VS so that it has these font colors?
ReSharper
Jaeger is a very great tool and easy to start with. However in production it has a significant downside - it's UI doesn't have any authentication. So you need to to play around with reverse proxies and external auth tools to hide jaeger UI behind something, like keycloak + oauth proxy + your main reverse proxy. It's a pain to setup this. While I find that from release of 2024.1 Seq does also support tracing, which in my opinion is more convenient to view together with logs in one place. This is what I personally use. Seq provides Auth and ApiKeys out of the box, which is super easy to setup. And OpenTelemetry exporter easily sends tracing data to Seq using gRPC endpoint
So far, I didn't have success with integrating Seq tracing with OpenTelemetry and .NET. Maybe we'll have a chat about that 😁
The best architecture before moving to Microservices? Start with Modular Monoliths ➡ bit.ly/3SXlzSt