Introduction
Event grid is new app-service in azure that connect applications together so that applications talk to each other in distributed environment. This way of working decouple application components, which enables more scalability, maintainability, and extensibility.
At the basic level it’s similar to a message queue service, like Azure Service Bus Topics, that enables a publish / subscribe model.
Azure Event Grid is a different kind of messaging service that’s built to enable event-based architectures like those use with Microservices architectures to be built more easily.
Azure Event Grid can be described as an event broker that has one of more event publishers and subscribers. Event publishers are currently Azure blob storage, resource groups, subscriptions, event hubs and custom events etc. Subsequently, there are consumers of events (subscribers) like Azure Functions, Logic Apps, and WebHooks.
Employee On boarding System Example:
Let’s take employee boarding system example which is very common and essential process to every organizations. So whenever new employees hired then there are some hiring formalities like save employee details in company database (azure database,on premises Database etc) and send and welcome email to employee to notified about joining dates and other formalities and also send calendar invites for both parties (employee and HR) to remind the joining date.
There may be some other parties may include in this process like transport department,IT department etc to set up all the necessary things at the time of employee on boarding.
So employee information is common to all parties and on the basis of this information the have to execute some set of actions like email creation,Id card issue,IT assets arrangement and seat allocation,so there should be a mechanism that can broadcast the same information to all interested parties.
Here Azure event grid comes in picture and help us to solve this problem in very efficient manner and logic apps removes all hurdles to integrate all external integrations like mail client,database base logic etc without much coding part.
Process Flow:
There are below important sections to developed above solution:
- Mvc application to submit employee details.
- Setup azure event grid in azure
- setup logic apps in azure
- Add logic apps as subscriber to event grid
- Integrate all together from step 1 to step 4.
1 ) Create Employee On-boarding Portal (Mvc Application)
Primarily web application will receive all employee details from end-users and generate a json formatted message and send to azure event grid topic instead of directly inserted in azure database.Later this message broadcast to all its subscribers and processed.In our case logic app is topic subscriber hence message received by logic app and start processing and executing related actions like send mail,send calendar invite so on.
Here i am taking simple mvc application for demonstration with simple form.
2 ) Setup azure event grid in azure
Login on azure portal and select new and search for event grid topic.Fill all the mandatory details like name,subscription,region and resource group.
once we finish with event grid configuration then we will navigate to below user interface where we have to set up event subscriptions.In our case logic apps will be our event listener and need to map here but we will setup later in next steps.
3 ) Setup Logic App Service:
Logic Apps helps us build, schedule, and automate processes as workflows so we can integrate apps, data, systems, and services across enterprises or organizations. Logic Apps simplifies how we design and create scalable solutions for app integration, data integration, system integration, enterprise application integration (EAI).
Choose “logic app ” service from available service in azure portal and fill all required information.
Now press create button and fill all required details like logic app name,resource group,region etc. logic app name should be unique throughout the globally and azure portal automatically suggest whether name is unique or not.
now navigate to logic app and start designing process flow with logic app connector.Below is complete designed logic app flow and we will talk about each connector step by step.
Let’s talk about each connector in details.
- EventGrid Connector: logic apps have connector called event grid connector that able to connect with event grid and received all broadcast messages.Here it will received employee details that is json formatted messages submitted by mvc application to event grid.
- Parse Json Connector: This connector parse the message that received from event grid on the basis of provided message schema.Here output from event grid connector will become input for parse json connector.If message parse successfully than same message passed to next step that responsible to insert data in database
- Sqlserver Connector: Sql connector enable us make communication with database.by using valid database credential we can make connection with database and select target tables in which message details need to store.
Once connection establish successfully with server then we can see all tables of that server.here we need to map our message properties with table columns to store message in sql tables.
when we will click on each property then message properties selection area enable to choose right property from all available.Below we can see there are multiple properties showing to select and we may select one or more properties to store in particular column,here i select employeeId to store in employeeid column.
- Google Calender & Gmail Calender Connectors: we have successfully configured event grid ,message parsing and database connection.Now we have to set up two important task like send Calender invite and send emails.here we are adding both connectors as parallel branch so that execute simultaneously once message save successfully in database.
first we have to click on (+) symbol and choose “add parallel branch” and then select google Calender connector and again repeat above thing select Gmail connector.
Now we have to provide all required information like valid Gmail email id and other massage details.
Now our logic app completely ready to use but one small integration still pending that is an integration of azure event grid logic apps.
4 ) Add logic apps as subscriber to event grid: Till above step we have created event grid, mvc application and logic apps.Now we have to add our logic apps as a subscriber to event grid so that every message can be broadcast to logic apps and trigger it.let’s see below steps:
- go to newly created event grid topic from azure portal and click on “Event Subscription” button on top of the expanded view in event grid and some mandatory details as per below .
To find subscriber endpoint,go to back our logic app.there is a option called “CalledBackUrl” and this is actual logic app calling end-point.we need to copied it and paste on above form.
once we add logic app as a subscriber,it will showing in event grid subscriber’s list as per below:
Great..our integration done till this step.Now little bit C# code need to add at our controller level to convert employee joining details in json message and send to event grid. let’s see how can we do it.
5 ) Mvc Application & Event Grid Integration:
Here mvc application works as message initiator and send employee details to event grid. by calling event grid topic end-point as a service.once this message send to event grid then event grid broadcast same message to its subscriber,here logic app is our subscriber so logic app trigger and start executing it’s all components like save data in db and send mails to employee email id.
we can find event-grid endpoint from event grid detail page as per below
look at the mvc controller from where application call event grid and sent message:
EmployeeController.cs
<span class="mceItemHidden">public class <span class="mceItemHidden"><span class="hiddenSpellError">EmployeeController</span></span> : Controller</span> { // GET: Employee <span class="mceItemHidden"> public <span class="mceItemHidden"><span class="hiddenSpellError">ActionResult</span></span> Index()</span> { return View(); } <span class="mceItemHidden"> [<span class="mceItemHidden"><span class="hiddenSpellError">HttpPost</span></span>]</span> <span class="mceItemHidden"> public <span class="mceItemHidden"><span class="hiddenSpellError">ActionResult</span></span> Index(<span class="hiddenSpellError">EmployeeModel</span> <span class="hiddenSpellError">employeeModel</span>)</span> { <span class="mceItemHidden"> <span class="mceItemHidden"><span class="hiddenSpellError">TimeSpan</span></span> hours = new System.TimeSpan(0, 9, 0, 0);</span> employeeModel.DateOfJoining.Add(hours); employeeModel.DateOfJoining = employeeModel.DateOfJoining.ToUniversalTime(); <span class="mceItemHidden"> <span class="mceItemHidden"><span class="hiddenSpellError">EventGridModel</span></span> <span class="hiddenSpellError">evmModel</span> = new EventGridModel();</span> <span class="mceItemHidden"> <span class="mceItemHidden"><span class="hiddenSpellError">evmModel</span></span>.id = new Guid().<span class="hiddenSpellError">ToString</span>();</span> evmModel.eventType = "NewPost"; evmModel.subject = "blog/posts"; evmModel.eventTime = "2017-08-20T23:14:22+1000"; evmModel.data = employeeModel; <span class="mceItemHidden">List<span class="mceItemHidden"><span class="hiddenSpellError">egmList</span></span> = new List();</span> egmList.Add(evmModel); <span class="mceItemHidden"> <span class="mceItemHidden"><span class="hiddenSpellError">SendMessageToEventGrid</span></span>(egmList);</span> return View(); }
Here private method “SendMessageToEventGrid” called and in this method we have use event grid end-point to post json message.let’s look at implementation.
Till now we have set up each component and now let’s see how things works when details submitted by mvc applcation.we will once details submitted successfully than message broadcast to all subscriber by event grid and logic app trigger and send Calender invite and email to employee.
Mvc application with employee details:
Once we press create button,message send to event grid and event grid triggers logic app.below is logic app running status where we can see all connector execute successfully ( click on highlighted details and See green sign on each connector).
we can see the complete process took only 5 second to execute including all connector.
Logic app running status in expend view:
Below is email and calender invite from my inbox where we can see email successfully sent by logic apps.
Calender Invite:
I hope you like this..keep learning and sharing.