0

We are re-writing some part of our Retail ERP application which was written in .net 4.0 Windows Application with backend services connected via .Net remoting all the way. My question is a follow-up and updated question on what I find here(RabbitMq Architecture for distributed POS).

Our application is similar in architecture but little more sophisticated in business function and it is an Enterprise application. The reason for the re-write is to improve the performance and reliability by separating non-critical functions to go through RabbitMQ and Caching of master data(which doesn't change much like inventory list, tax, pricelist etc.) on the client machine using Mongo DB or Redis Cache.

On the Message Queuing front which were already answered in the above link, my choice will be,

  1. Will create the necessary queue in the RabbitMQ server one for each store in the BackOffice server and set persistence to true before starting the client.
  2. The Exchange will be a topic exchange and every
  3. Will leave the tills queues on the store's broker and using only application client on Tills to reach the transportation data.
  4. Tills will NOT have its own database except Caching and directly connect to in-store server.

My question now is,

  • Is RabbitMQ the better choice, if we understand the complexities involved? We don't want to regret later on
  • On the RabbitMQ Client, We are working only with EasyNetQ with advanced binding. Now started comparing it with MassTransit and there are several other suggestions when I searched for it(Kafka seems to be another better candidate as suggested in the comment). Is there any other open source plugin which better suit (out of the box) this UseCase?

Hope I have given sufficient details and adhered to the guidelines. Please excuse if I am not.

Community
  • 1
  • 1
Apsar
  • 19
  • 1
  • 1
  • 5
  • RabbitMQ does not persist message order. So if you are dependent on that go a head with Kafka. – Karolis Kajenas May 20 '17 at 08:56
  • 1
    this is too big of a question for SO. But, you can abstract your queue so that it can be msmq, rabbitmq, zeromq – Keith Nicholas May 20 '17 at 08:56
  • and, just to throw another thing in the works, you may want to check orleans or akka.net as a complete alternative using the actor model. – Keith Nicholas May 20 '17 at 08:57
  • @Karolis Surprised to know that. Then I have to offload few useCases off the wagon if I go with RabbitMQ. Today I was actually looking into videos on Kafka. Just worried about the learning curve and roadblock which might get me back to square one. – Apsar May 20 '17 at 09:24
  • @Karolis Kafka seems to be a better choice. But I am worried about the custom installation steps required for the Kafka on Windows. Also as this Application environment will be desktop PC for some customers which will not be up 24/7. There is a 1% chance that client application tries to send when the server is offline. Is there a better way to buffer except using some custom caching on the client side. – Apsar May 20 '17 at 23:27
  • @Apsar I would recommend reading on CAP theorem, some ideas might come to you on the trade-offs you have to make. I would suggest focusing on redundancy/availability when it comes to middle-man's as RabbitMQ/Kafka. To focus on question, I would suggest investing time in getting MQ to perform caching if say service behind it is down. MQ cluster should be up all the time, also if next tier from client is MQ I do not see other way than to cache it in client if that is necessary. Disclaimer don't take this wall of text for granted and complete truth. – Karolis Kajenas May 21 '17 at 08:34

0 Answers0