Tim. You're doing a lot of good stuff for people who needs a practical focus of the knowledge, specially in a world where people expect you to have experience with every tool and aspect.
That's the best ever intro about RabbitMQ brilliant Mr TimCorey, you are the best teacher explain effectively what is RabbitMQ and how to use it simulated in the real world microservices architecture Thanks to much from my heart ❤
I have been waiting for RabbitMQ, explained by you for a long time. Now, I am confident that I'll know what the hell is this XD. Thank you for everything.
Thank you for another helpful video. Your content consistently provides clear and practical information that is very useful. I appreciate the effort you put into making these tutorials. Keep up the fantastic work!
Another great option is to use Azure Service Bus as the queue, and then use Azure functions to pull out of service bus. The functions can be triggered automatically when a message arrives in the SB.
Thanks a lot Tim! Even I with my zero experience with RabbitMQ and in a kind of stressful condition managed to understand something about it. At least know I know what it is and what is the purpose of this system.
For years I was constrained to having to use MSMQ and I wasn't that keen on message queues. RabbitMQ is so much better in so many ways, big fan of message queues now.
Really Great Content Tim. Now I got good understanding on RabbitMQ. In addition to present video, could you please do some video related to connecting to rabbit mq using azure functions and sending messages. Thanks once again for your valuable time and efforts.
Great Video. Keep up the good work. I was wondering how this would compare or collaborate with SignalR? I think that would be an excellent topic for another video. Another excellent option for another video will be how to integrate this in Azure for many remote clients from many sources or senders.
Thanks for the suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/ As for a comparison to SignalR, they are really different. SignalR maintains a constant connection between the server and client in order to send and receive messages. With RabbitMQ, you send messages to the server and then close the connection. The server holds the messages until someone is listening. Then it sends the messages to the client. It is a very disconnected, asynchronous system.
This is a great video! I really learned a lot. I'll try to simulate this too later. Just want to check if you have a video related to dead letter exchange. Thank you!
Thanks for the video! I'm new to the message broker concept and a little confused still. If I stand up a C# API, should the "Receiver" call the API on the received event? Is is standard to host the MQ on the same server as one of the API's? If I'm understanding correctly I can place this in-between my API and my JavaScript website? I really appreciate all the content!
Thanks for sharing! I'm left with a question that the video does not mention that much about, which is 'when do I use it'? We are going to use it to get webhook events from the payment service stripe and store it in the database that our server uses. The advantage we see is no load on server and no extra code in our server. We want to create a message bus for sending requests to others services as well like the CRM service hubspot. But when I saw our video I was thinking we could also use RabbitMQ for client requests like you show in your video and the part about load-balancing is interesting and got me thinking how many things people can wait for and I can't think of a lot. Actually I could only think of your example 'the register account' case. I'm thinking regular show a list of all 'objects' or all CRUD operations where you want the list of objects to be changed instantly. What I could think of was registering to a newsletter and could maybe think of more examples, but I think it would only be a low percentage of all requests going to the server that could wait. Is that true in most cases it's only very little of websites traffic which are using queues? Also I was thinking do anyone go all out and puts every request in the queues to get the full benefit of the load/balancing, or would it hurt performance for e.g. loading some objects details page too much with this layer? Thanks again, so much quality in your videos.
Good questions. Queues are typically more useful for tasks that are long-running rather than ones that need real-time results. For instance, you could request a report and have it emailed to you once the report is generated. That could use a queue. You could use a queue for a purchase, where the warehouse processes it, the shipping department processes the next step (also from a queue), etc. Typically, you wouldn't be using it for times when the user wants an immediate response.
Hi Tim, great video. How would I deploy this Client/Server to AWS or an Azure test account? I hope you had a great Christmas and that you have a great, healthy, and happy new year. Thanks for your time.
Merry Christmas and a happy New Year to you as well. As for how to deploy the client and/or server to Azure, that sounds like a good video. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
Hi Tim, Great video, really helpful. I have a question: I expected that if the data is being encoded as byte[] we wouldn't be able to see the message on rabbitMQ UI, how could we?
Hi @iamtimcorey , thanks for the great tutorial. My current organization is using rabbitmq for production too. One question, can we use rabbitmq for simple chat applications where one to one and one to many user are present?
Tim, why you don't have content on mobile? Xamarin is not good enough? I need to learn mobile but I'm struggling to decide between C# technology and flutter with Dart.
I've covered intros to .NET MAUI and Blazor Hybrid (both successors to Xamarin). I haven't done a lot with mobile because it is a bit of a niche subject. However, I will be covering it more in the near future.
This might be a slightly odd or obvious question.... How do you ensure only one receiver app consumes each message? What stops them grabbing the same message, before its ack'd by the other app or does RabbitMQ take care of this?
RabbitMQ sends out the message to only one listener. It then will wait for that message to be processed. There is a timeout for in the case where the listener crashed after receiving the message. In that case, the message can be put back in the queue and handled by the next listener.
Thank you for this great intro. Please is there a way for one message to be consumed by more than one consumer such that when the producer sends a message, the message can be consumed by 2 or more consumers? I am looking at a pub/sub scenario where one producer sends a message that is needed by multiple consumers. How do you ensure that the message is not deleted immediately the first consumer consumes it and how do you ensure the message gets removed from the ques after it has been consumed by all the consumers that need to consume it?
Great Vid Tim, Love the VS tips as well. You started off by talking about a 'sign up page'. So for example, if the client hits submit to register, then it gets queued, client closes down etc, when the message eventually gets processed, and the client was already registered, what happens then?
Most signup actions don't have to be immediate. For instance, even the "we've sent you an email. Click on the link in it to create your login." isn't really immediate. That can take a few seconds and it is ok. Others, though, are even longer. For instance, the welcome email that tells you about the services available to you. That can come out days later and its ok.
How one can consume some messages, not acknowledge them immediately, close the channel/connection, and later on, in a new process acknowledge a few selected consumed message? The selection is based on some side processes on the consumed messages.
@@IAmTimCorey Thanks for your reply, I also watched your suggestion app course. in this scenario, can I use RabbitMQ between Blazor server and MongoDB, use a background worker to receive a message from RabbitMQ ? but if I want to get a suggestion data (not post a suggestion data), Can I send get request message to RabbitMQ? Thanks in advance.
Only a question, if the consumer doesn't ack the message , does the massage position chage? I mean is the not ack message pushed in the queue? thanks a lot@@IAmTimCorey
I think discussing a long running process, such as a large file upload, is useful in these instances as you can't tell the user the status of the file upload right away.
@@IAmTimCorey I think what mike is trying to say is that it would be nice to hear about how we could be able to show the status of say, a file upload to the client so it doesnt just hang. i dont know though but im assuming thats what he means
Let’s say I have 2 micro services . One is order service and other is payment . Order service can not commit until it gets confirmation that payment is successful . So if order service puts message in queue and payment service processes it then how order service get confirmation that payment is done ?
Each should have a unique id. Then, when the order service gets a "payment complete" message, it can use that id to figure out which order to continue processing.
The only thing concerning about azure service bus which is related to rabbitmq is the cost. I doubt most businesses would want to pay over 10,000 dollars a month for azure service bus no matter how good it is unfortunately. Are there any free online queing options?
Azure Service Bus costs $0.05/million messages. If you get to $10,000/month, you are either doing something wrong or you should be happy to pay that amount.
You can email help@iamtimcorey.com and someone will help you out. Just make sure to include the details like which video you were trying to get the code for.
Can rabbitmq be a replacement for signal r? If so, then signal r would eventually be dead. What a person would do is use rabbit mq to put to the que and whoever, takes it would do it. obviously if several parts need it, then hopefully a workaround for it. Is this intended to even replace signal r?
No, they are two completely different technologies that serve two different purposes. With SignalR, ApplicationA opens up a direct connection to ApplicationB. It then keeps that connection open as long as is needed (usually the entire length of the application's lifecycle). RabbitMQ, on the other hand, sits in between the two applications. ApplicationA sends a message to RabbitMQ. That connection is then closed (or more messages can be sent, but the connection does not need to be open all the time). RabbitMQ puts the message in the right queue and potentially alerts all interested parties (one or many). If the message is to be processed once, as was the case in our demo, ApplicationB will connect to RabbitMQ and get the message. That connection does not need to be established while ApplicationA is sending the message. An analogy would be that SignalR is a phone call and Message Brokers (like RabbitMQ) are email hosts. We still make phone calls, even though we can send an email and we still send email even when we could make a call. The two communication mediums serve different purposes.
@@IAmTimCoreyit worked in a web app by placing the code inside a 'BackgroundService' and putting 'await Task.Delay(1000, stoppingToken);' inside an infinite while loop `while (!stoppingToken.IsCancellationRequested)`
I have an issue here. The thing is that im not very familiar with this type of applications and im trying to learn. I have thrown the dokcer container an I do have access to RabbitMQ Server. The thing is that when I run the Sender's program nothing happends. I mean, the program compiles with no errors, but when I check the server, I cannot find the exchange neither the queue. Does sb know the reason??
When the app comes online, it can send and receive messages. You would just need to handle how to store the messages until you are online on the desktop side.
I have a question. Couldn't sql server be used as a service bus? If so, then rabbit mq would be completely useless because you simply put into sql server. sql server can easily be like a que system where you put data and whoever processes it does not have to be online at the time. When they process, then can delete from sql server. what is the advantage of rabbit mq vs using sql server?
SQL is far more expensive and is not designed to be a queue. For instance, it cannot guarantee that only one application gets the message, it doesn’t do push notifications, it doesn’t handle the constant churn of messages as well, and much more.
I’ve got a queueing system up and running in SQL (had to do it that way because it’s managed by non developer IT people who do know sql quite well). It’s ok, it can easily handle 1000 requests a minute and process them individually, but when you get a backlog (say the server is down for a couple of hours) it really starts to slow down. RabbitMQ is designed to act like a firehose, doing testing with it in docker I had messages going through at about 1000 a second, never mind a minute.
I get the error message "None of the specified endpoints were reachable" in line 8 of the sender script: IConnection cnn = factory.CreateConnection(); The URI is correct and the server (via Docker) is running. Does anybody know a solution? Die RabbitMQ change the syntax?
Syntax is still working the same, maybe there's a small problem with the docker container. You can try deleting your existing container and create a new one with this line: docker run -d --hostname rmq --name rabbit-server -p 8080:15672 -p 5672:5672 rabbitmq:3-management (just paste it into cmd) if that doesn't work either mabye there's a typo somewhere else (that happens to me quite often ^ ^) here's the code: using RabbitMQ.Client; using System.Text; ConnectionFactory factory = new(); factory.Uri = new Uri(uriString: "amqp://guest:guest@localhost:5672"); factory.ClientProvidedName = "Rabbit Sender App"; IConnection cnn = factory.CreateConnection(); IModel channel = cnn.CreateModel(); string exchangeName = "DemoExchange"; string routingKey = "demo-routing-key"; string queueName = "DemoQueue"; channel.ExchangeDeclare(exchangeName, ExchangeType.Direct); channel.QueueDeclare(queueName, false, false, false, null); channel.QueueBind(queueName, exchangeName, routingKey, null); /*byte[] messageBodyBytes = Encoding.UTF8.GetBytes("Hello everyone!"); channel.BasicPublish(exchangeName, routingKey, null, messageBodyBytes);*/ for (int i = 0; i < 60; i++) { Console.WriteLine("Sending message: " + i); byte[] messageBodyBytes = Encoding.UTF8.GetBytes("Message #" + i); channel.BasicPublish(exchangeName, routingKey, null, messageBodyBytes); Thread.Sleep(1000); } channel.Close(); cnn.Close();
Hi Tim, Its a great video. I am facing some issue, can you please help me out. I need some help with RabbitMQ. I have started learning from now only. With so many trails, I have successfully code and run the program but whatever queues and exchanges I am declaring in my code, I am not able to display on my RabbitMQ management console its not updating there which I have run on localhost using Docker Container. Can you please help me out, I have researched and tried a lot but didn't work. My code is running well in console
I'm sorry, I can't diagnose your issue from that information. Your best option is to debug step by step. If it works in one deployment but not in another, check your connection strings. Use logging and breakpoints to validate your assumptions.
It's because of difference in delay before the console log statement. 48 was processed first but printed after 5 second delay while 49 was processed later but printed before 48 due to only 2 seconds delay. RabbitMQ does try to deliver the messages in order but if consumer fails processing ordering is not guaranteed
Do you have an example of rabbit mq with one publish event and multiple subscribers for example I publish an event user created and I want two subscribers to do something with it, like one app may subscribe to event and send text and another app may subscribe to same event and log data
Not only you teach coding, but architecting a system at the same time. Blessed to have a mentor like you Sir!
Thank you!
Tim is a very great teacher not a facilitator. He is a mentor. He makes what seems hard very simple.
Thank you.
Tim. You're doing a lot of good stuff for people who needs a practical focus of the knowledge, specially in a world where people expect you to have experience with every tool and aspect.
Thank you!
Can't believe you uploaded a video about RabbitMQ, I was making researches about this topic last week, I really need this video! Thanks Tim
Glad I could help!
That's the best ever intro about RabbitMQ
brilliant Mr TimCorey, you are the best teacher explain effectively what is RabbitMQ and how to use it simulated in the real world microservices architecture
Thanks to much from my heart ❤
I am glad it was helpful.
Dziękujemy.
Thank you!
Great content.. your content not only teach us c# but the whole echo system. ♥️
Thanks!
I have been waiting for RabbitMQ, explained by you for a long time. Now, I am confident that I'll know what the hell is this XD.
Thank you for everything.
You are welcome.
I really like these clips; they help me understand instantly, unlike other RUclips videos.
Great!
Thank you for another helpful video. Your content consistently provides clear and practical information that is very useful. I appreciate the effort you put into making these tutorials. Keep up the fantastic work!
You are welcome.
Another great option is to use Azure Service Bus as the queue, and then use Azure functions to pull out of service bus. The functions can be triggered automatically when a message arrives in the SB.
Yep. Functions can operate on both sides.
Thanks a lot Tim! Even I with my zero experience with RabbitMQ and in a kind of stressful condition managed to understand something about it. At least know I know what it is and what is the purpose of this system.
I am glad it was helpful.
Great stuff Tim. I Was looking for a tutorial on this topic and the experience I got is the best. Looking out for more.
Glad it was helpful!
For years I was constrained to having to use MSMQ and I wasn't that keen on message queues. RabbitMQ is so much better in so many ways, big fan of message queues now.
I am glad it was helpful.
Microsoft excels at taking relatively simple concepts and implementing them in the most extraordinarily complicated ways as possible.
Thanks for the vid Tim. Just yesterday I was looking for a tutorial on this topic and did not find something as clear.
Thank you so much.
You are very welcome.
Hi
Very clear way of explaning.
I saw some videos on RabbitMQ, but I was waiting for your way of explaining things.
Thanks
You are welcome.
Incredible explaining skills Tim. Thank you
You are welcome.
You are brilliant and so down to earth
Thank you!
this is a great intro, straight to the point
Thanks!
Great video Tim! Hope to see more RabbitMQ content soon :)
Thanks!
Amazing knowledge I got from this tutorial, Thank you very much
You are welcome.
I was able to use Dapper and insert the messages, I used a stored procedure, really cool.
Great!
very nice explaniation with real demo 🥰
Thank you!
What a masterpiece AS ALWAYS
Thank you!
Really Great Content Tim. Now I got good understanding on RabbitMQ. In addition to present video, could you please do some video related to connecting to rabbit mq using azure functions and sending messages. Thanks once again for your valuable time and efforts.
Thanks for the suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
Great Video. Keep up the good work. I was wondering how this would compare or collaborate with SignalR? I think that would be an excellent topic for another video. Another excellent option for another video will be how to integrate this in Azure for many remote clients from many sources or senders.
Thanks for the suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
As for a comparison to SignalR, they are really different. SignalR maintains a constant connection between the server and client in order to send and receive messages. With RabbitMQ, you send messages to the server and then close the connection. The server holds the messages until someone is listening. Then it sends the messages to the client. It is a very disconnected, asynchronous system.
Thank you Tim , ur explanation On Point 😎
You are welcome.
Amazing video, thank you sir!
You are welcome.
Excellent tutorial. Very helpful
I am glad it was helpful.
Thank you for the great video again Tim! :)
You are welcome.
Great explanation man👌 Thank you !
You are welcome.
Great, great, great. Thank you!
You are welcome.
This is a great video! I really learned a lot. I'll try to simulate this too later. Just want to check if you have a video related to dead letter exchange. Thank you!
I don't have a video specific to dead letter exchange. Sorry. You can add it as a suggestion on suggestions.iamtimcorey.com if you want to see one.
Thanks! Another excellent explanation as always
You are welcome.
Great video! I hope we get a tutorial on MassTransit too. Thank you so much.
Thanks for the suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
thank you so much, now i can understand rabbitmq
You are welcome.
Thank you very much for the video, it was very useful.
You are welcome.
Thank you for another great Video Tim.
You are welcome.
Thanks for the video! I'm new to the message broker concept and a little confused still. If I stand up a C# API, should the "Receiver" call the API on the received event? Is is standard to host the MQ on the same server as one of the API's? If I'm understanding correctly I can place this in-between my API and my JavaScript website? I really appreciate all the content!
Thanks for sharing! I'm left with a question that the video does not mention that much about, which is 'when do I use it'?
We are going to use it to get webhook events from the payment service stripe and store it in the database that our server uses. The advantage we see is no load on server and no extra code in our server. We want to create a message bus for sending requests to others services as well like the CRM service hubspot.
But when I saw our video I was thinking we could also use RabbitMQ for client requests like you show in your video and the part about load-balancing is interesting and got me thinking how many things people can wait for and I can't think of a lot. Actually I could only think of your example 'the register account' case.
I'm thinking regular show a list of all 'objects' or all CRUD operations where you want the list of objects to be changed instantly. What I could think of was registering to a newsletter and could maybe think of more examples, but I think it would only be a low percentage of all requests going to the server that could wait. Is that true in most cases it's only very little of websites traffic which are using queues?
Also I was thinking do anyone go all out and puts every request in the queues to get the full benefit of the load/balancing, or would it hurt performance for e.g. loading some objects details page too much with this layer?
Thanks again, so much quality in your videos.
Good questions. Queues are typically more useful for tasks that are long-running rather than ones that need real-time results. For instance, you could request a report and have it emailed to you once the report is generated. That could use a queue. You could use a queue for a purchase, where the warehouse processes it, the shipping department processes the next step (also from a queue), etc. Typically, you wouldn't be using it for times when the user wants an immediate response.
Hi Tim, great video. How would I deploy this Client/Server to AWS or an Azure test account? I hope you had a great Christmas and that you have a great, healthy, and happy new year. Thanks for your time.
Merry Christmas and a happy New Year to you as well. As for how to deploy the client and/or server to Azure, that sounds like a good video. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
You rock Tim!
Thanks!
Hi Tim,
Great video, really helpful. I have a question:
I expected that if the data is being encoded as byte[] we wouldn't be able to see the message on rabbitMQ UI, how could we?
Hi @iamtimcorey , thanks for the great tutorial. My current organization is using rabbitmq for production too. One question, can we use rabbitmq for simple chat applications where one to one and one to many user are present?
Hi Tim thanks for your video, please make a video like this for Redis
I already did: ruclips.net/video/UrQWii_kfIE/видео.html
@@IAmTimCorey Thanks a lot Tim
That's really interesting topic!
Thanks!
Tim, why you don't have content on mobile? Xamarin is not good enough? I need to learn mobile but I'm struggling to decide between C# technology and flutter with Dart.
I've covered intros to .NET MAUI and Blazor Hybrid (both successors to Xamarin). I haven't done a lot with mobile because it is a bit of a niche subject. However, I will be covering it more in the near future.
@@IAmTimCorey Awesome, thanks.
Very Good quick lesson
Thank you!
This might be a slightly odd or obvious question.... How do you ensure only one receiver app consumes each message? What stops them grabbing the same message, before its ack'd by the other app or does RabbitMQ take care of this?
RabbitMQ sends out the message to only one listener. It then will wait for that message to be processed. There is a timeout for in the case where the listener crashed after receiving the message. In that case, the message can be put back in the queue and handled by the next listener.
@IAmTimCorey thanks for the clarification
Thank you for this great intro. Please is there a way for one message to be consumed by more than one consumer such that when the producer sends a message, the message can be consumed by 2 or more consumers? I am looking at a pub/sub scenario where one producer sends a message that is needed by multiple consumers. How do you ensure that the message is not deleted immediately the first consumer consumes it and how do you ensure the message gets removed from the ques after it has been consumed by all the consumers that need to consume it?
Yep, that's a setting you can set. You just need to establish how long the messages will live, etc.
Great Vid Tim, Love the VS tips as well. You started off by talking about a 'sign up page'. So for example, if the client hits submit to register, then it gets queued, client closes down etc, when the message eventually gets processed, and the client was already registered, what happens then?
or are we talking a max of a few seconds where the client just waits for the response.
Most signup actions don't have to be immediate. For instance, even the "we've sent you an email. Click on the link in it to create your login." isn't really immediate. That can take a few seconds and it is ok. Others, though, are even longer. For instance, the welcome email that tells you about the services available to you. That can come out days later and its ok.
Excellent SIR
Thanks!
How one can consume some messages, not acknowledge them immediately, close the channel/connection, and later on, in a new process acknowledge a few selected consumed message? The selection is based on some side processes on the consumed messages.
Thank you so much!
You're welcome!
Hi Tim,
Is RabbitMQ only work for post or put actions? not used in get and delete action ?
RabbitMQ is a message broker. It just receives and sends messages. What you do when you receive those messages is up to you.
@@IAmTimCorey Thanks for your reply, I also watched your suggestion app course. in this scenario, can I use RabbitMQ between Blazor server and MongoDB, use a background worker to receive a message from RabbitMQ ? but if I want to get a suggestion data (not post a suggestion data), Can I send get request message to RabbitMQ? Thanks in advance.
awesome Tim!
Thanks!
Tim The gem!
Thanks!
Really good tutorial
Thank you!
Only a question, if the consumer doesn't ack the message , does the massage position chage? I mean is the not ack message pushed in the queue? thanks a lot@@IAmTimCorey
Hey Tim, that was a great content. Do you have any plan to bring more tutorials on this topic?
Yes, I do.
Do you have an example of a production application with asynchronous message handling and exception handling?
It would be helpful if you could provide this course-specific list.
Which course-specific list?
@@IAmTimCorey I was looking for this RabbitMQ course in the portal but didn't find it there.
I don't have a course on RabbitMQ, sorry.
Thank you for the info, I thought you had one 😊
Great tutorial, +1
Thank you!
Colored tabs are useful if we use vertical Tabs. Yes it will be helpful to have corresponding color in Solution explorer.
Thanks for sharing!
Thanks🎉🎉
You are welcome.
The drawing tool is awesome
Thanks!
I think discussing a long running process, such as a large file upload, is useful in these instances as you can't tell the user the status of the file upload right away.
I'm sorry, I'm not sure what you mean.
@@IAmTimCorey I think what mike is trying to say is that it would be nice to hear about how we could be able to show the status of say, a file upload to the client so it doesnt just hang.
i dont know though but im assuming thats what he means
Great video
Thanks!
Thank you so much 😊
You're welcome.
thank you, Sir
You're welcome!
Let’s say I have 2 micro services . One is order service and other is payment . Order service can not commit until it gets confirmation that payment is successful . So if order service puts message in queue and payment service processes it then how order service get confirmation that payment is done ?
Have the order service listen for a message from the payment service about completed payments.
@@IAmTimCorey I might have 10 requests in waiting then how order service can listen for a particular response?
Each should have a unique id. Then, when the order service gets a "payment complete" message, it can use that id to figure out which order to continue processing.
@@IAmTimCorey Is this possible with RabbitMQ if yes then how ?
Great video Tim 👍
Could you also do DDS (Data Delivery Service)?
And possibly how it is used in ROS2?
Thanks for the suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
@@IAmTimCorey Done
@@IAmTimCorey I like to do that. But I think admins need to first do a (p)review and give the thumbs up before I get that kind of option.
Hey Tim, can you tell me how to make the annotations appear at 16:43 like the one called "uriString" inside the Uri method?
Here you go: ruclips.net/video/morBKqtqmso/видео.htmlsi=0YKpnFgXE27nvQgs
@@IAmTimCorey Thanks Tim.
Thanks a lot
You are welcome.
The only thing concerning about azure service bus which is related to rabbitmq is the cost. I doubt most businesses would want to pay over 10,000 dollars a month for azure service bus no matter how good it is unfortunately. Are there any free online queing options?
Azure Service Bus costs $0.05/million messages. If you get to $10,000/month, you are either doing something wrong or you should be happy to pay that amount.
Hi Tim I did try to download the example but for some reason I did not receive the email.
You can email help@iamtimcorey.com and someone will help you out. Just make sure to include the details like which video you were trying to get the code for.
Can rabbitmq be a replacement for signal r? If so, then signal r would eventually be dead. What a person would do is use rabbit mq to put to the que and whoever, takes it would do it. obviously if several parts need it, then hopefully a workaround for it. Is this intended to even replace signal r?
No, they are two completely different technologies that serve two different purposes. With SignalR, ApplicationA opens up a direct connection to ApplicationB. It then keeps that connection open as long as is needed (usually the entire length of the application's lifecycle). RabbitMQ, on the other hand, sits in between the two applications. ApplicationA sends a message to RabbitMQ. That connection is then closed (or more messages can be sent, but the connection does not need to be open all the time). RabbitMQ puts the message in the right queue and potentially alerts all interested parties (one or many). If the message is to be processed once, as was the case in our demo, ApplicationB will connect to RabbitMQ and get the message. That connection does not need to be established while ApplicationA is sending the message.
An analogy would be that SignalR is a phone call and Message Brokers (like RabbitMQ) are email hosts. We still make phone calls, even though we can send an email and we still send email even when we could make a call. The two communication mediums serve different purposes.
How can we make a web app listen and recieve messages ?
That’s what an API does.
@@IAmTimCoreyit worked in a web app by placing the code inside a 'BackgroundService' and putting 'await Task.Delay(1000, stoppingToken);' inside an infinite while loop `while (!stoppingToken.IsCancellationRequested)`
Will your next tutorial be for using complex type messages?
Probably not, but I may if I get enough interest on the suggestion site: suggestions.iamtimcorey.com
Thanks Tim :)
You are welcome.
How failsafe / resilient is the queue itsself?
Very, if you need it to be. You can set it up as a cluster or even as a set of clusters over multiple locations.
Currently I'm working with hangfire, I don't see the difference between Rabbit MQ and Hangfire, Can you help me please? Thank you!
Hangfire schedules tasks. RabbitMQ receives messages and sends them out (think email server).
Thank you.
You're welcome!
I have an issue here. The thing is that im not very familiar with this type of applications and im trying to learn. I have thrown the dokcer container an I do have access to RabbitMQ Server. The thing is that when I run the Sender's program nothing happends. I mean, the program compiles with no errors, but when I check the server, I cannot find the exchange neither the queue. Does sb know the reason??
Check your connection string. It may be different than mine. Also, make sure you have open ports and the ports are the correct numbers in Docker.
@@IAmTimCorey sorry for bother you again but where can i find the connection string?
Great, but why do we need function app
The function app is acting as the application that does something with the messages.
Can rabbitmq be used in an offline/online desktop application?
When the app comes online, it can send and receive messages. You would just need to handle how to store the messages until you are online on the desktop side.
I have a question. Couldn't sql server be used as a service bus? If so, then rabbit mq would be completely useless because you simply put into sql server. sql server can easily be like a que system where you put data and whoever processes it does not have to be online at the time. When they process, then can delete from sql server. what is the advantage of rabbit mq vs using sql server?
SQL is far more expensive and is not designed to be a queue. For instance, it cannot guarantee that only one application gets the message, it doesn’t do push notifications, it doesn’t handle the constant churn of messages as well, and much more.
I’ve got a queueing system up and running in SQL (had to do it that way because it’s managed by non developer IT people who do know sql quite well).
It’s ok, it can easily handle 1000 requests a minute and process them individually, but when you get a backlog (say the server is down for a couple of hours) it really starts to slow down.
RabbitMQ is designed to act like a firehose, doing testing with it in docker I had messages going through at about 1000 a second, never mind a minute.
Is source code sending works? I tried but didn't recieved mail.
Check your spam filter. If you don't see it there, email help@iamtimcorey.com and Tom will get it to you.
I get the error message "None of the specified endpoints were reachable" in line 8 of the sender script:
IConnection cnn = factory.CreateConnection();
The URI is correct and the server (via Docker) is running. Does anybody know a solution?
Die RabbitMQ change the syntax?
Syntax is still working the same, maybe there's a small problem with the docker container.
You can try deleting your existing container and create a new one with this line:
docker run -d --hostname rmq --name rabbit-server -p 8080:15672 -p 5672:5672 rabbitmq:3-management
(just paste it into cmd)
if that doesn't work either mabye there's a typo somewhere else (that happens to me quite often ^ ^) here's the code:
using RabbitMQ.Client;
using System.Text;
ConnectionFactory factory = new();
factory.Uri = new Uri(uriString: "amqp://guest:guest@localhost:5672");
factory.ClientProvidedName = "Rabbit Sender App";
IConnection cnn = factory.CreateConnection();
IModel channel = cnn.CreateModel();
string exchangeName = "DemoExchange";
string routingKey = "demo-routing-key";
string queueName = "DemoQueue";
channel.ExchangeDeclare(exchangeName, ExchangeType.Direct);
channel.QueueDeclare(queueName, false, false, false, null);
channel.QueueBind(queueName, exchangeName, routingKey, null);
/*byte[] messageBodyBytes = Encoding.UTF8.GetBytes("Hello everyone!");
channel.BasicPublish(exchangeName, routingKey, null, messageBodyBytes);*/
for (int i = 0; i < 60; i++)
{
Console.WriteLine("Sending message: " + i);
byte[] messageBodyBytes = Encoding.UTF8.GetBytes("Message #" + i);
channel.BasicPublish(exchangeName, routingKey, null, messageBodyBytes);
Thread.Sleep(1000);
}
channel.Close();
cnn.Close();
Hi Tim, Its a great video. I am facing some issue, can you please help me out. I need some help with RabbitMQ. I have started learning from now only. With so many trails, I have successfully code and run the program but whatever queues and exchanges I am declaring in my code, I am not able to display on my RabbitMQ management console its not updating there which I have run on localhost using Docker Container. Can you please help me out, I have researched and tried a lot but didn't work. My code is running well in console
I'm sorry, I can't diagnose your issue from that information. Your best option is to debug step by step. If it works in one deployment but not in another, check your connection strings. Use logging and breakpoints to validate your assumptions.
im not getting the source code sadly, ive tried 2 different email addresses
Check your spam filter and then email help@iamtimcorey.com
Can you make a video about masstransit? thank you
Thanks for the suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
@@IAmTimCorey Upvoted MassTransit. Thanks for the amazing content.
What is the best free RabbitMQ hosting provider (dev purposes)?
Host it locally with Docker. If you want to do something web-based, I would use Azure Service Bus, which will cost $0.05/1 million messages.
wow I had no idea excalidraw had a drawing library!
I'm glad you learned something new.
47:08 Message #47, #49 and #48. Unfortunately, he didn't address this great case at that moment.
Order is not guaranteed. Is that what you wanted to be covered?
It's because of difference in delay before the console log statement. 48 was processed first but printed after 5 second delay while 49 was processed later but printed before 48 due to only 2 seconds delay. RabbitMQ does try to deliver the messages in order but if consumer fails processing ordering is not guaranteed
that's great
Thank you!
So what happens if the Broker is down?
No messages go through.
Hey anyone tell me whats the setup for c#?
on Mac
This will all work on a Mac. You just need to install Docker and Visual Studio for Mac and you will be set.
Please make a tutorial on MQTT Broker (emqx)
Thanks for the suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
Hi,no email received to download code
Email help@iamtimcorey.com and they can help you out.
Do you have an example of rabbit mq with one publish event and multiple subscribers for example I publish an event user created and I want two subscribers to do something with it, like one app may subscribe to event and send text and another app may subscribe to same event and log data
I don't, but it is a good suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/
@@IAmTimCorey ok added it