I'm looking for suggestions for a communication system to be used in an asp.net mvc web application.

The internal company users and the external users need to be able to send messages to each other. There also needs to be an email notification sent letting the users know that they have a new message in the application.

Are there any existing open source projects that can do this? Or non open-source?

It doesn't need to be on every page - just on one page. The users need to be able to send the company a message and we need to be able to send the users messages.


First of all, you need to be sure that you have an authentication mechanism for internal company users. My suggestion is that you can use identity server which is open source.


On the other hand, you should have an authorize system which controls the user permissions if you need to limit user permissions (Policy server).

For communication system, you should code a simple program using RabbitMq queue mechanism on mqtt. Mqtt is useful protocols for messaging. There are really good examples for that you can use for communication system developing.


Also I found two example codes which is on github for communication system. But I think you should use RabbitMq or other mqtt brokers. For all users you should open a connection on mqtt broker when users are online. To start a conversation, whenever a user try to send a message to a different user, you should create a specific topic. And then, users should subscribe to the topic belongs to conversation. When a new message sent (published), subscribed clients can get messages. This is called as pub-sub pattern.

You should think if there is no client which is subscribed to the topic. If your system should work between only online users, you dont have to do anything. If the system should work also for offline users means that user should get the messages which are sent to the user on offline status. In this case, user should get messages whenever the user is online. So, you need to use a queue mechanism like RabbitMq. After RabbitMq mqtt plugin is activated, a queue binds to mqtt exchange and the messages will be sent to the queue. After that, you need to consume the queue and if users are online, you would notify the users using events.

If you need to save messages you should use a log queue and consume it and save messages.

Example Links:

https://github.com/RocketChat/Rocket.Chat https://github.com/gediminasgu/RabbitMqChat - Warning! This code provided for messaging Demo purposes and shouldn't be used in Production like environments.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.