{"id":11912,"date":"2022-08-22T16:21:59","date_gmt":"2022-08-22T10:51:59","guid":{"rendered":"https:\/\/blogrevamp.cashfree.com\/?p=11912"},"modified":"2023-01-17T11:34:22","modified_gmt":"2023-01-17T06:04:22","slug":"building-scaleable-notification-service","status":"publish","type":"post","link":"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/","title":{"rendered":"How We Built a Scalable Notification Service\u00a0"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a8f80a6f3076\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #364250;color:#364250\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #364250;color:#364250\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a8f80a6f3076\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/#Why_Do_We_Need_a_Centralised_Notification_Service\" >Why Do We Need a Centralised Notification Service?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/#How_Have_We_Built_Our_Notification_Service\" >How Have We Built Our Notification Service?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/#How_Do_We_Trace_Notification_Statuslogs\" >How Do We Trace Notification Status\/logs?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/#How_Do_We_Monitor_Notification_Service_Health\" >How Do We Monitor Notification Service Health?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/#Future_Scopes\" >Future Scopes<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">In today\u2019s world of technology, we have apps available in the market that can enable us to do our day to day tasks effectively. The success of any app hugely depends on one of the main factors: End user Experience.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are many things that will enhance the end user experience and one amongst them is user notification. It becomes even more important for a company like Cashfree Payments which is in the Payments space and handles 20 million+ API requests in a day. This blog will explain how we have built a Notification Service to increase the notification delivery along with scalability.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_Do_We_Need_a_Centralised_Notification_Service\"><\/span>Why Do We Need a Centralised Notification Service?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Over the years, Cashfree Payments has launched multiple innovative tech products like Payouts, Cashgram, <a href=\"https:\/\/blog.cashfree.com\/what-is-softpos\/\">SoftPoS<\/a> etc. These applications deal with large volumes of user payments related data and it is very important for these applications to notify these users about the status of various user operations performed in the application in near real time.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A centralised micro service like a notification service will help in abstracting these common user notification requirements from various internal services.<\/li>\n\n\n\n<li>Having a notification service allows us to add new notification modes easily. It also helps us add or update notification service vendors without affecting specific applications.<\/li>\n\n\n\n<li>As Cashfree Payments grows bigger and starts its operations outside India, we will need to have the ability to handle internationalisation. In such cases, a centralised notification becomes important so that all notification related changes can be done in a single service.<\/li>\n\n\n\n<li>In general, as the organisation\u2019s use cases expand, we can add more sophistication into the notification services, for example priorities, scheduling, better quality of reporting<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Have_We_Built_Our_Notification_Service\"><\/span>How Have We Built Our Notification Service?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our notification service is built by keeping scaling and notification success rate as primary success criteria. As of today the service handles approximately 3000 requests per minute and this number is growing every single day.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We currently support four different modes to send the notification:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>SMS: SMS notification will be sent to the end user mobile number.<\/li>\n\n\n\n<li>Email: Email notification will be sent to the list of mail ids.<\/li>\n\n\n\n<li>Whatsapp: Whatsapp notification will be sent to the end user mobile number.<\/li>\n\n\n\n<li>Webhook: Webhook URL will be shared by the end user and we will notify the user by triggering the webhook url<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Architecture Diagram<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"770\" height=\"481\" data-attachment-id=\"11925\" data-permalink=\"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/scalable_d1_v3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/Scalable_D1_v3.png?fit=1727%2C1080&amp;ssl=1\" data-orig-size=\"1727,1080\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Scalable_D1_v3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/Scalable_D1_v3.png?fit=770%2C481&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/Scalable_D1_v3.png?resize=770%2C481&#038;ssl=1\" alt=\"\" class=\"wp-image-11925\" srcset=\"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/Scalable_D1_v3.png?resize=1024%2C640&amp;ssl=1 1024w, https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/Scalable_D1_v3.png?resize=300%2C188&amp;ssl=1 300w, https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/Scalable_D1_v3.png?resize=768%2C480&amp;ssl=1 768w, https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/Scalable_D1_v3.png?resize=1536%2C961&amp;ssl=1 1536w, https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/Scalable_D1_v3.png?w=1727&amp;ssl=1 1727w\" sizes=\"(max-width: 770px) 100vw, 770px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Major components and their responsibilities:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Kafka<\/strong>: Kafka allows us to decouple the speed at which requests come, from the speed at which they can be delivered to destination. They can also be buffered if the destination is down.<br>In our case, Kafka will be used mainly to perform a couple of tasks:\n<ol class=\"wp-block-list\">\n<li>To help internal teams publish a notification request on a particular topic that the notification service can process.<\/li>\n\n\n\n<li>To publish the notification response from the notification service that internal teams can consume.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>Centralised Redis:<\/strong> We use Redission (Redis client for Java) delayed queue that will help to retry a failed notification using exponential backoff strategy. We can even use Kafka for retry but we preferred Redis as we started and over a period of time, we have plans to use Kafka for the retry use case too.<\/li>\n\n\n\n<li><strong>MySql: <\/strong>We are currently publishing the notification response to the response Kafka topic. We will be persisting this data in a MySql database too which will help the end users query the notification responses over a period of time.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Below is the typical happy path flow of how a notification is delivered to the end user:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Various internal applications publish to the notification service Kafka topic.<\/li>\n\n\n\n<li>The notification service listens to the Notification Request Kafka topic and parses the incoming request to notification request which will have details around the mode of notification (For eg: SMS, Webhook, Email, Whatsapp), notification template (we use a moustache template system) and notification related details.<\/li>\n\n\n\n<li>Our notification service uses Spring Webflux framework which helps us in having a concurrency model which can further help us handle increasingly more requests with relatively less number of threads. Once the notification request is ready, the request will be sent to the respective implementation based on the mode of notification (For eg.: SMSImpl, EmailImpl, WebhookImpl or WhatsAppImpl). We have multiple service providers for each notification mode.<\/li>\n\n\n\n<li>We choose a service provider to send the notification and forward the notification request to the service provider and attach a callback to get the delivery status.<\/li>\n\n\n\n<li>We publish the notification response back to notification response Kafka topic which can then be consumed by our internal teams to get the status of notification.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Having a happy path workflow running is good. But while building large enterprise applications, it is extremely important to identify the failure cases and have flows to handle the same.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So below are some of failure cases in Notification delivery and how we handle them:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Retrying a Failed Notification<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We have a centralised delayed queue, where we will push a notification request if there is a failure seen in the notification delivery status. Below is the detailed workflow:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Failed notification is sent to a delayed queue with some initial delay based on the notification mode.<\/li>\n\n\n\n<li>We have notification retry workers, which keeps polling this queue and if it will help in retrying the request. If the request fails again, then we will use the exponential backoff strategy and send back the request queue again. We will repeat the process for some time, again based on the notification mode.<\/li>\n\n\n\n<li>If the notification fails after all the retries, then we mark the request as failure and an alert will be sent to internal systems.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Replaying a Failed Notification<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Notification response will be written back to Kafka response topic.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Our internal teams can consume the notification response.<\/li>\n\n\n\n<li>If there is a failure, then our team can send the same request back to the notification service and the service will try to send the notification.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Do_We_Trace_Notification_Statuslogs\"><\/span>How Do We Trace Notification Status\/logs?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There are two ways in which we can now track the notification status:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Subscribing to the Notification Response topic which will provide the notification status related details.<\/li>\n\n\n\n<li>Notification status will be published to our internal logging system which users can query to get the details.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Do_We_Monitor_Notification_Service_Health\"><\/span>How Do We Monitor Notification Service Health?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>We have micrometer metrics enabled for all the critical flows in the Notification Service.<\/li>\n\n\n\n<li>We have internal dashboards which read the metrics and help us monitor the system closely.<\/li>\n\n\n\n<li>We have an internal alerting setup which will alert the notification team whenever any of the set thresholds are breached.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Future_Scopes\"><\/span>Future Scopes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>We are building a data persistence layer to persist the notification data in the database for a certain interval of time.<\/li>\n\n\n\n<li>APIs to help internal applications to get the notification status and replay a notification<\/li>\n\n\n\n<li>Support for new modes to notifications like Slack.<\/li>\n\n\n\n<li>Provide ways for apps to replay a failed notification.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">We have a lot of data from this service and we are planning to utilise this data to derive useful insights.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Does this sound exciting and intriguing to you? Then we have some exciting opportunities lined up for engineers like yourself!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.cashfree.com\/careers\/?utm_source=pillar_page&amp;utm_medium=organic&amp;utm_campaign=building_scaleable_notification_service_blog\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/AgMQ7WtPevNHqhLx8o4zu_VY2eR_5CAephc8pEwadAPQhfF8bzZXHWLrex8sPkPhiorKL4fZcEMA83clAwjGo1PXwyr9Rsm05kgCouLiWGvBI-8lK50F20vRzmLQBqEuZG7eGFTrwYu5MW206dCajwQ\" alt=\"How Cashfree Payments Achieves Concurrency: With Great Power Comes Great Responsibility\"\/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>In today\u2019s world of technology, we have apps available in the market that can enable us to do our day to day tasks effectively. The success of any app hugely depends on one of the main factors: End user Experience.&nbsp; There are many things that will enhance the end user experience and one amongst them<\/p>\n","protected":false},"author":51,"featured_media":11915,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_themeisle_gutenberg_block_has_review":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1,1497],"tags":[],"class_list":["post-11912","post","type-post","status-publish","format-standard","has-post-thumbnail","category-all","category-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How We Built a Scalable Notification Service\u00a0<\/title>\n<meta name=\"description\" content=\"Read on to understand how we have built a notification service to increase the notification delivery along with scalability!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How We Built a Scalable Notification Service\u00a0\" \/>\n<meta property=\"og:description\" content=\"Read on to understand how we have built a notification service to increase the notification delivery along with scalability!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/\" \/>\n<meta property=\"og:site_name\" content=\"Cashfree Payments Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-22T10:51:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-17T06:04:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/S_N_Tn.png?fit=996%2C664&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"996\" \/>\n\t<meta property=\"og:image:height\" content=\"664\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"ananthshenoyh\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ananthshenoyh\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How We Built a Scalable Notification Service\u00a0","description":"Read on to understand how we have built a notification service to increase the notification delivery along with scalability!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/","og_locale":"en_US","og_type":"article","og_title":"How We Built a Scalable Notification Service\u00a0","og_description":"Read on to understand how we have built a notification service to increase the notification delivery along with scalability!","og_url":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/","og_site_name":"Cashfree Payments Blog","article_published_time":"2022-08-22T10:51:59+00:00","article_modified_time":"2023-01-17T06:04:22+00:00","og_image":[{"width":996,"height":664,"url":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/S_N_Tn.png?fit=996%2C664&ssl=1","type":"image\/png"}],"author":"ananthshenoyh","twitter_card":"summary_large_image","twitter_misc":{"Written by":"ananthshenoyh","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/#article","isPartOf":{"@id":"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/"},"author":{"name":"ananthshenoyh","@id":"https:\/\/blogrevamp.cashfree.com\/#\/schema\/person\/575bf9d7e2bd145bef04f29a64bafa3d"},"headline":"How We Built a Scalable Notification Service\u00a0","datePublished":"2022-08-22T10:51:59+00:00","dateModified":"2023-01-17T06:04:22+00:00","mainEntityOfPage":{"@id":"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/"},"wordCount":1193,"commentCount":0,"image":{"@id":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/S_N_Tn.png?fit=996%2C664&ssl=1","articleSection":["All","Engineering"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogrevamp.cashfree.com\/building-scaleable-notification-service\/","url":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/","name":"How We Built a Scalable Notification Service\u00a0","isPartOf":{"@id":"https:\/\/blogrevamp.cashfree.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/#primaryimage"},"image":{"@id":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/S_N_Tn.png?fit=996%2C664&ssl=1","datePublished":"2022-08-22T10:51:59+00:00","dateModified":"2023-01-17T06:04:22+00:00","author":{"@id":"https:\/\/blogrevamp.cashfree.com\/#\/schema\/person\/575bf9d7e2bd145bef04f29a64bafa3d"},"description":"Read on to understand how we have built a notification service to increase the notification delivery along with scalability!","breadcrumb":{"@id":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/#primaryimage","url":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/S_N_Tn.png?fit=996%2C664&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/S_N_Tn.png?fit=996%2C664&ssl=1","width":996,"height":664,"caption":"scaleable notification service"},{"@type":"BreadcrumbList","@id":"https:\/\/www.cashfree.com\/blog\/building-scaleable-notification-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogrevamp.cashfree.com\/"},{"@type":"ListItem","position":2,"name":"All","item":"https:\/\/blogrevamp.cashfree.com\/category\/all\/"},{"@type":"ListItem","position":3,"name":"How We Built a Scalable Notification Service\u00a0"}]},{"@type":"WebSite","@id":"https:\/\/blogrevamp.cashfree.com\/#website","url":"https:\/\/blogrevamp.cashfree.com\/","name":"Cashfree Payments Blog","description":"Cashfree Payments- Payment Gateway for India","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogrevamp.cashfree.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogrevamp.cashfree.com\/#\/schema\/person\/575bf9d7e2bd145bef04f29a64bafa3d","name":"ananthshenoyh","url":"https:\/\/blogrevamp.cashfree.com\/author\/ananthshenoyh\/"}]}},"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9MjXo-368","jetpack_likes_enabled":false,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2022\/08\/S_N_Tn.png?fit=996%2C664&ssl=1","_links":{"self":[{"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/posts\/11912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/comments?post=11912"}],"version-history":[{"count":7,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/posts\/11912\/revisions"}],"predecessor-version":[{"id":14032,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/posts\/11912\/revisions\/14032"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/media\/11915"}],"wp:attachment":[{"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/media?parent=11912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/categories?post=11912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/tags?post=11912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}