{"id":481,"date":"2026-05-16T05:55:00","date_gmt":"2026-05-16T05:55:00","guid":{"rendered":"https:\/\/harshad-sonawane.com\/blog\/?p=481"},"modified":"2026-04-07T10:38:14","modified_gmt":"2026-04-07T10:38:14","slug":"building-reactive-microservices-spring-webflux-rsocket","status":"publish","type":"post","link":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/","title":{"rendered":"Building Reactive Microservices with Spring WebFlux &amp; RSocket"},"content":{"rendered":"<p data-start=\"222\" data-end=\"503\">Modern <a href=\"https:\/\/harshad-sonawane.com\/blog\/reduce-cloud-costs-java-applications\/\">microservices<\/a> architectures are evolving rapidly to meet the demands of high concurrency, real-time data processing, and efficient resource utilization. Traditional blocking models, while simple, often struggle under heavy load due to thread limitations and I\/O bottlenecks.<\/p>\n<p data-start=\"505\" data-end=\"846\">Reactive programming offers a compelling alternative. By combining non-blocking execution with event-driven communication, developers can build systems that are both scalable and resilient. In this article, we explore how to design reactive microservices using <span class=\"hover:entity-accent entity-underline inline cursor-pointer align-baseline\"><span class=\"whitespace-normal\">Spring <a href=\"https:\/\/harshad-sonawane.com\/blog\/building-real-time-applications-java-architecture-frameworks\/\">WebFlux<\/a><\/span><\/span> and <span class=\"hover:entity-accent entity-underline inline cursor-pointer align-baseline\"><span class=\"whitespace-normal\">RSocket<\/span><\/span>.<\/p>\n<hr data-start=\"848\" data-end=\"851\" \/>\n<h2 data-section-id=\"pmbr0u\" data-start=\"853\" data-end=\"892\">Understanding Reactive Microservices<\/h2>\n<p data-start=\"894\" data-end=\"952\">Reactive microservices are based on a few core principles:<\/p>\n<ul data-start=\"954\" data-end=\"1071\">\n<li data-section-id=\"ed5xt6\" data-start=\"954\" data-end=\"974\">Non-blocking I\/O<\/li>\n<li data-section-id=\"8q8203\" data-start=\"975\" data-end=\"1004\">Asynchronous data streams<\/li>\n<li data-section-id=\"1rlg417\" data-start=\"1005\" data-end=\"1041\">Backpressure-aware communication<\/li>\n<li data-section-id=\"rj0526\" data-start=\"1042\" data-end=\"1071\">Event-driven architecture<\/li>\n<\/ul>\n<p data-start=\"1073\" data-end=\"1271\">These principles are formalized in the <span class=\"hover:entity-accent entity-underline inline cursor-pointer align-baseline\"><span class=\"whitespace-normal\">Reactive Streams<\/span><\/span> specification, which defines how systems handle data flow between producers and consumers without overwhelming resources.<\/p>\n<p data-start=\"1273\" data-end=\"1425\">Unlike traditional systems, reactive applications use fewer threads and rely on event loops to process large numbers of concurrent requests efficiently.<\/p>\n<hr data-start=\"1427\" data-end=\"1430\" \/>\n<h2 data-section-id=\"rw0v70\" data-start=\"1432\" data-end=\"1472\">Limitations of Traditional Approaches<\/h2>\n<p data-start=\"1474\" data-end=\"1515\">In a conventional Spring MVC application:<\/p>\n<ul data-start=\"1517\" data-end=\"1663\">\n<li data-section-id=\"uegbcd\" data-start=\"1517\" data-end=\"1566\">Each request is handled by a dedicated thread<\/li>\n<li data-section-id=\"15pw2q0\" data-start=\"1567\" data-end=\"1617\">Threads block during database or network calls<\/li>\n<li data-section-id=\"lsz8g\" data-start=\"1618\" data-end=\"1663\">Throughput is limited by thread pool size<\/li>\n<\/ul>\n<p data-start=\"1665\" data-end=\"1688\">This model can lead to:<\/p>\n<ul data-start=\"1690\" data-end=\"1770\">\n<li data-section-id=\"vj7qfa\" data-start=\"1690\" data-end=\"1722\">Thread exhaustion under load<\/li>\n<li data-section-id=\"qm1d34\" data-start=\"1723\" data-end=\"1744\">Increased latency<\/li>\n<li data-section-id=\"npk8d1\" data-start=\"1745\" data-end=\"1770\">Inefficient CPU usage<\/li>\n<\/ul>\n<p data-start=\"1772\" data-end=\"1883\">Reactive systems address these limitations by eliminating blocking operations and using non-blocking pipelines.<\/p>\n<hr data-start=\"1885\" data-end=\"1888\" \/>\n<h2 data-section-id=\"ni2uhj\" data-start=\"1890\" data-end=\"1935\">Spring WebFlux: The Reactive Web Framework<\/h2>\n<p data-start=\"1937\" data-end=\"2106\"><span class=\"hover:entity-accent entity-underline inline cursor-pointer align-baseline\"><span class=\"whitespace-normal\">Spring WebFlux<\/span><\/span> is designed for building reactive applications on the <a href=\"https:\/\/harshad-sonawane.com\/blog\/java-memory-management-heap-gc-best\/\">JVM<\/a>. It is built on Project Reactor, which provides two primary abstractions:<\/p>\n<ul data-start=\"2108\" data-end=\"2213\">\n<li data-section-id=\"sjx5wx\" data-start=\"2108\" data-end=\"2160\"><code data-start=\"2110\" data-end=\"2116\">Mono<\/code> \u2013 represents a single asynchronous result<\/li>\n<li data-section-id=\"l2szu5\" data-start=\"2161\" data-end=\"2213\"><code data-start=\"2163\" data-end=\"2169\">Flux<\/code> \u2013 represents a stream of multiple results<\/li>\n<\/ul>\n<h3 data-section-id=\"8um4n0\" data-start=\"2215\" data-end=\"2250\">Example: Reactive REST Endpoint<\/h3>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"w-full overflow-x-hidden overflow-y-auto\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" dir=\"ltr\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><span>@<\/span><span class=\"\u037ce\">RestController<\/span><br \/>\n<span>@<\/span><span class=\"\u037ce\">RequestMapping<\/span><span>(<\/span><span class=\"\u037cc\">&#8220;\/orders&#8221;<\/span><span>)<\/span><br \/>\n<span class=\"\u037c8\">public<\/span><span> <\/span><span class=\"\u037c8\">class<\/span><span> <\/span><span class=\"\u037ce\">OrderController<\/span><span> {<\/span><\/p>\n<p><span> @<\/span><span class=\"\u037ce\">GetMapping<\/span><span>(<\/span><span class=\"\u037cc\">&#8220;\/{id}&#8221;<\/span><span>)<\/span><br \/>\n<span> <\/span><span class=\"\u037c8\">public<\/span><span> <\/span><span class=\"\u037ce\">Mono<\/span><span>&lt;<\/span><span class=\"\u037ce\">Order<\/span><span>&gt; <\/span><span class=\"\u037ce\">getOrder<\/span><span>(@<\/span><span class=\"\u037ce\">PathVariable<\/span><span> <\/span><span class=\"\u037ce\">String<\/span><span> <\/span><span class=\"\u037ce\">id<\/span><span>) {<\/span><br \/>\n<span> <\/span><span class=\"\u037c8\">return<\/span><span> <\/span><span class=\"\u037ce\">orderService<\/span><span class=\"\u037c8\">.<\/span><span class=\"\u037ce\">findById<\/span><span>(<\/span><span class=\"\u037ce\">id<\/span><span>);<\/span><br \/>\n<span> }<\/span><br \/>\n<span>}<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"2474\" data-end=\"2570\">This endpoint does not block a thread while waiting for the result, enabling better scalability.<\/p>\n<hr data-start=\"2572\" data-end=\"2575\" \/>\n<h2 data-section-id=\"r7133\" data-start=\"2577\" data-end=\"2626\">RSocket: A Protocol for Reactive Communication<\/h2>\n<p data-start=\"2628\" data-end=\"2756\"><span class=\"hover:entity-accent entity-underline inline cursor-pointer align-baseline\"><span class=\"whitespace-normal\">RSocket<\/span><\/span> is a binary protocol designed specifically for reactive systems. Unlike HTTP, it supports:<\/p>\n<ul data-start=\"2758\" data-end=\"2864\">\n<li data-section-id=\"14i7763\" data-start=\"2758\" data-end=\"2789\">Bidirectional communication<\/li>\n<li data-section-id=\"1f0r3al\" data-start=\"2790\" data-end=\"2838\">Multiplexed streams over a single connection<\/li>\n<li data-section-id=\"ktk822\" data-start=\"2839\" data-end=\"2864\">Built-in backpressure<\/li>\n<\/ul>\n<h3 data-section-id=\"qn7jr4\" data-start=\"2866\" data-end=\"2888\">Interaction Models<\/h3>\n<p data-start=\"2890\" data-end=\"2939\">RSocket supports multiple communication patterns:<\/p>\n<ul data-start=\"2941\" data-end=\"3039\">\n<li data-section-id=\"zhu2zb\" data-start=\"2941\" data-end=\"2961\">Request-Response<\/li>\n<li data-section-id=\"xp9aja\" data-start=\"2962\" data-end=\"2981\">Fire-and-Forget<\/li>\n<li data-section-id=\"18mw7mw\" data-start=\"2982\" data-end=\"3000\">Request-Stream<\/li>\n<li data-section-id=\"a5l9dk\" data-start=\"3001\" data-end=\"3039\">Channel (bi-directional streaming)<\/li>\n<\/ul>\n<p data-start=\"3041\" data-end=\"3128\">This flexibility makes it ideal for microservices that require real-time data exchange.<\/p>\n<hr data-start=\"3130\" data-end=\"3133\" \/>\n<h2 data-section-id=\"1v03ixd\" data-start=\"3135\" data-end=\"3170\">Integrating WebFlux with RSocket<\/h2>\n<p data-start=\"3172\" data-end=\"3251\">Spring provides native support for RSocket, making integration straightforward.<\/p>\n<h3 data-section-id=\"s5ms85\" data-start=\"3253\" data-end=\"3283\">RSocket Controller Example<\/h3>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"w-full overflow-x-hidden overflow-y-auto\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" dir=\"ltr\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><span>@<\/span><span class=\"\u037ce\">Controller<\/span><br \/>\n<span class=\"\u037c8\">public<\/span><span> <\/span><span class=\"\u037c8\">class<\/span><span> <\/span><span class=\"\u037ce\">OrderRSocketController<\/span><span> {<\/span><\/p>\n<p><span> @<\/span><span class=\"\u037ce\">MessageMapping<\/span><span>(<\/span><span class=\"\u037cc\">&#8220;orders.stream&#8221;<\/span><span>)<\/span><br \/>\n<span> <\/span><span class=\"\u037c8\">public<\/span><span> <\/span><span class=\"\u037ce\">Flux<\/span><span>&lt;<\/span><span class=\"\u037ce\">Order<\/span><span>&gt; <\/span><span class=\"\u037ce\">streamOrders<\/span><span>() {<\/span><br \/>\n<span> <\/span><span class=\"\u037c8\">return<\/span><span> <\/span><span class=\"\u037ce\">orderService<\/span><span class=\"\u037c8\">.<\/span><span class=\"\u037ce\">getAllOrders<\/span><span>();<\/span><br \/>\n<span> }<\/span><br \/>\n<span>}<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"3478\" data-end=\"3559\">This enables streaming responses directly between services without HTTP overhead.<\/p>\n<hr data-start=\"3561\" data-end=\"3564\" \/>\n<h2 data-section-id=\"1mbv9yl\" data-start=\"3566\" data-end=\"3614\">Designing Reactive Microservices Architecture<\/h2>\n<p data-start=\"3616\" data-end=\"3667\">A well-designed reactive system typically includes:<\/p>\n<ul data-start=\"3669\" data-end=\"3820\">\n<li data-section-id=\"l294hc\" data-start=\"3669\" data-end=\"3705\">API Gateway (optional, reactive)<\/li>\n<li data-section-id=\"1qk36by\" data-start=\"3706\" data-end=\"3737\">Non-blocking service layers<\/li>\n<li data-section-id=\"xf4xks\" data-start=\"3738\" data-end=\"3789\">Reactive data sources (R2DBC, reactive MongoDB)<\/li>\n<li data-section-id=\"1ad7wi3\" data-start=\"3790\" data-end=\"3820\">Event-driven communication<\/li>\n<\/ul>\n<h3 data-section-id=\"1wfi9fq\" data-start=\"3822\" data-end=\"3847\">Key Design Principles<\/h3>\n<ol data-start=\"3849\" data-end=\"4247\">\n<li data-section-id=\"wvspuy\" data-start=\"3849\" data-end=\"3948\"><strong data-start=\"3852\" data-end=\"3884\">End-to-end non-blocking flow<\/strong><br data-start=\"3884\" data-end=\"3887\" \/>Avoid introducing blocking calls anywhere in the pipeline.<\/li>\n<li data-section-id=\"xfiv1v\" data-start=\"3950\" data-end=\"4041\"><strong data-start=\"3953\" data-end=\"3974\">Service isolation<\/strong><br data-start=\"3974\" data-end=\"3977\" \/>Each service should handle its own data and processing logic.<\/li>\n<li data-section-id=\"p6xomd\" data-start=\"4043\" data-end=\"4132\"><strong data-start=\"4046\" data-end=\"4071\">Backpressure handling<\/strong><br data-start=\"4071\" data-end=\"4074\" \/>Ensure consumers can control the rate of incoming data.<\/li>\n<li data-section-id=\"10whnaa\" data-start=\"4134\" data-end=\"4247\"><strong data-start=\"4137\" data-end=\"4169\">Loose coupling via messaging<\/strong><br data-start=\"4169\" data-end=\"4172\" \/>Use RSocket or event streams instead of synchronous REST where possible.<\/li>\n<\/ol>\n<hr data-start=\"4249\" data-end=\"4252\" \/>\n<h2 data-section-id=\"1j890hh\" data-start=\"4254\" data-end=\"4286\">Backpressure and Flow Control<\/h2>\n<p data-start=\"4288\" data-end=\"4353\">Backpressure is critical in reactive systems to prevent overload.<\/p>\n<p data-start=\"4355\" data-end=\"4385\">Example using Project Reactor:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"w-full overflow-x-hidden overflow-y-auto\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" dir=\"ltr\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><span class=\"\u037ce\">Flux<\/span><span class=\"\u037c8\">.<\/span><span class=\"\u037ce\">range<\/span><span>(<\/span><span class=\"\u037cb\">1<\/span><span>, <\/span><span class=\"\u037cb\">1000<\/span><span>)<\/span><br \/>\n<span> <\/span><span class=\"\u037c8\">.<\/span><span class=\"\u037ce\">limitRate<\/span><span>(<\/span><span class=\"\u037cb\">100<\/span><span>)<\/span><br \/>\n<span> <\/span><span class=\"\u037c8\">.<\/span><span class=\"\u037ce\">subscribe<\/span><span>();<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"4458\" data-end=\"4525\">This ensures that the consumer processes data at a manageable rate.<\/p>\n<hr data-start=\"4527\" data-end=\"4530\" \/>\n<h2 data-section-id=\"n2701b\" data-start=\"4532\" data-end=\"4560\">Error Handling Strategies<\/h2>\n<p data-start=\"4562\" data-end=\"4622\">Reactive systems require explicit error handling mechanisms.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"w-full overflow-x-hidden overflow-y-auto\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" dir=\"ltr\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037c5 \u037cj\">\n<div class=\"cm-scroller\">\n<div class=\"cm-content q9tKkq_readonly\"><span class=\"\u037c8\">return<\/span><span> <\/span><span class=\"\u037ce\">orderService<\/span><span class=\"\u037c8\">.<\/span><span class=\"\u037ce\">findById<\/span><span>(<\/span><span class=\"\u037ce\">id<\/span><span>)<\/span><br \/>\n<span> <\/span><span class=\"\u037c8\">.<\/span><span class=\"\u037ce\">onErrorResume<\/span><span>(<\/span><span class=\"\u037ce\">error<\/span><span> -&gt; <\/span><span class=\"\u037ce\">Mono<\/span><span class=\"\u037c8\">.<\/span><span class=\"\u037ce\">empty<\/span><span>());<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"4713\" data-end=\"4739\">Common strategies include:<\/p>\n<ul data-start=\"4741\" data-end=\"4803\">\n<li data-section-id=\"e0z5ro\" data-start=\"4741\" data-end=\"4763\">Fallback responses<\/li>\n<li data-section-id=\"1y2psti\" data-start=\"4764\" data-end=\"4782\">Retry policies<\/li>\n<li data-section-id=\"1352da8\" data-start=\"4783\" data-end=\"4803\">Circuit breakers<\/li>\n<\/ul>\n<hr data-start=\"4805\" data-end=\"4808\" \/>\n<h2 data-section-id=\"1yl02m0\" data-start=\"4810\" data-end=\"4839\">Performance Considerations<\/h2>\n<h3 data-section-id=\"5y7puq\" data-start=\"4841\" data-end=\"4853\">Benefits<\/h3>\n<ul data-start=\"4855\" data-end=\"4968\">\n<li data-section-id=\"pp2k67\" data-start=\"4855\" data-end=\"4896\">High concurrency with minimal threads<\/li>\n<li data-section-id=\"iolu6v\" data-start=\"4897\" data-end=\"4937\">Efficient CPU and memory utilization<\/li>\n<li data-section-id=\"ha7wlm\" data-start=\"4938\" data-end=\"4968\">Reduced latency under load<\/li>\n<\/ul>\n<h3 data-section-id=\"1o5hnx2\" data-start=\"4970\" data-end=\"4984\">Challenges<\/h3>\n<ul data-start=\"4986\" data-end=\"5136\">\n<li data-section-id=\"1jzpbts\" data-start=\"4986\" data-end=\"5033\">Debugging asynchronous flows can be complex<\/li>\n<li data-section-id=\"14x8ncv\" data-start=\"5034\" data-end=\"5076\">Requires reactive-compatible libraries<\/li>\n<li data-section-id=\"xo4i7z\" data-start=\"5077\" data-end=\"5136\">Learning curve for developers new to reactive paradigms<\/li>\n<\/ul>\n<hr data-start=\"5138\" data-end=\"5141\" \/>\n<h2 data-section-id=\"1a9f7fx\" data-start=\"5143\" data-end=\"5160\">Best Practices<\/h2>\n<ul data-start=\"5162\" data-end=\"5374\">\n<li data-section-id=\"9dnsnm\" data-start=\"5162\" data-end=\"5204\">Avoid blocking calls such as <code data-start=\"5193\" data-end=\"5202\">block()<\/code><\/li>\n<li data-section-id=\"1v8i7rw\" data-start=\"5205\" data-end=\"5246\">Use reactive database drivers (R2DBC)<\/li>\n<li data-section-id=\"1lafndi\" data-start=\"5247\" data-end=\"5287\">Monitor event loop threads carefully<\/li>\n<li data-section-id=\"61fq96\" data-start=\"5288\" data-end=\"5322\">Implement timeouts and retries<\/li>\n<li data-section-id=\"mudkf2\" data-start=\"5323\" data-end=\"5374\">Use <a href=\"https:\/\/harshad-sonawane.com\/blog\/monitoring-java-applications-prometheus-grafana-kubernetes\/\">observability<\/a> tools for tracing and metrics<\/li>\n<\/ul>\n<hr data-start=\"5376\" data-end=\"5379\" \/>\n<h2 data-section-id=\"18f9n1i\" data-start=\"5381\" data-end=\"5418\">When to Use Reactive Microservices<\/h2>\n<p data-start=\"5420\" data-end=\"5466\">Reactive architecture is most beneficial when:<\/p>\n<ul data-start=\"5468\" data-end=\"5604\">\n<li data-section-id=\"iq1b1s\" data-start=\"5468\" data-end=\"5513\">Handling high traffic or concurrent users<\/li>\n<li data-section-id=\"1gmdrxn\" data-start=\"5514\" data-end=\"5557\">Building streaming or real-time systems<\/li>\n<li data-section-id=\"15yoyvo\" data-start=\"5558\" data-end=\"5604\">Integrating multiple asynchronous services<\/li>\n<\/ul>\n<p data-start=\"5606\" data-end=\"5665\">It may not be necessary for simple CRUD-based applications.<\/p>\n<hr data-start=\"5667\" data-end=\"5670\" \/>\n<h2 data-section-id=\"114wazr\" data-start=\"5672\" data-end=\"5689\">Final Thoughts<\/h2>\n<p data-start=\"5691\" data-end=\"6008\">Building reactive microservices with Spring WebFlux and RSocket enables systems to scale efficiently while maintaining responsiveness under load. By adopting non-blocking I\/O, backpressure-aware streams, and event-driven communication, developers can design modern architectures that are both robust and future-ready.<\/p>\n<p data-start=\"6010\" data-end=\"6153\">However, success with reactive systems depends on consistent design practices and a solid understanding of asynchronous programming principles.<\/p>\n<hr data-start=\"6155\" data-end=\"6158\" \/>\n<h1 data-section-id=\"afoywu\" data-start=\"6160\" data-end=\"6172\">References<\/h1>\n<ul data-start=\"6174\" data-end=\"6474\">\n<li data-section-id=\"s62ax0\" data-start=\"6174\" data-end=\"6263\"><a data-start=\"6176\" data-end=\"6261\" rel=\"noopener\" target=\"_new\" class=\"decorated-link\" href=\"https:\/\/docs.spring.io\/spring-framework\/docs\/current\/reference\/html\/web-reactive.html\">https:\/\/docs.spring.io\/spring-framework\/docs\/current\/reference\/html\/web-reactive.html<span aria-hidden=\"true\" class=\"ms-0.5 inline-block align-middle leading-none\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" aria-hidden=\"true\" data-rtl-flip=\"\" class=\"block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]\"><use href=\"\/cdn\/assets\/sprites-core-dd80ba6x.svg#304883\" fill=\"currentColor\"><\/use><\/svg><\/span><\/a><\/li>\n<li data-section-id=\"imajx1\" data-start=\"6264\" data-end=\"6322\"><a data-start=\"6266\" data-end=\"6320\" rel=\"noopener\" target=\"_new\" class=\"decorated-link\" href=\"https:\/\/projectreactor.io\/docs\/core\/release\/reference\/\">https:\/\/projectreactor.io\/docs\/core\/release\/reference\/<span aria-hidden=\"true\" class=\"ms-0.5 inline-block align-middle leading-none\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" aria-hidden=\"true\" data-rtl-flip=\"\" class=\"block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]\"><use href=\"\/cdn\/assets\/sprites-core-dd80ba6x.svg#304883\" fill=\"currentColor\"><\/use><\/svg><\/span><\/a><\/li>\n<li data-section-id=\"1scnf5p\" data-start=\"6323\" data-end=\"6351\"><a data-start=\"6325\" data-end=\"6349\" rel=\"noopener\" target=\"_new\" class=\"decorated-link cursor-pointer\">https:\/\/rsocket.io\/docs\/<span aria-hidden=\"true\" class=\"ms-0.5 inline-block align-middle leading-none\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" aria-hidden=\"true\" data-rtl-flip=\"\" class=\"block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]\"><use href=\"\/cdn\/assets\/sprites-core-dd80ba6x.svg#304883\" fill=\"currentColor\"><\/use><\/svg><\/span><\/a><\/li>\n<li data-section-id=\"s2etw5\" data-start=\"6352\" data-end=\"6436\"><a data-start=\"6354\" data-end=\"6434\" rel=\"noopener\" target=\"_new\" class=\"decorated-link cursor-pointer\">https:\/\/docs.spring.io\/spring-framework\/docs\/current\/reference\/html\/rsocket.html<span aria-hidden=\"true\" class=\"ms-0.5 inline-block align-middle leading-none\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" aria-hidden=\"true\" data-rtl-flip=\"\" class=\"block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]\"><use href=\"\/cdn\/assets\/sprites-core-dd80ba6x.svg#304883\" fill=\"currentColor\"><\/use><\/svg><\/span><\/a><\/li>\n<li data-section-id=\"opcu1u\" data-start=\"6437\" data-end=\"6474\"><a data-start=\"6439\" data-end=\"6472\" rel=\"noopener\" target=\"_new\" class=\"decorated-link\" href=\"https:\/\/www.reactive-streams.org\/\">https:\/\/www.reactive-streams.org\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Modern microservices architectures are evolving rapidly to meet the demands of high concurrency, real-time data processing, and efficient resource utilization. Traditional blocking models, while simple, often struggle under heavy load due to thread limitations and I\/O bottlenecks. Reactive programming offers a compelling alternative. By combining non-blocking execution with event-driven communication, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":484,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":"","jetpack_publicize_message":"Building scalable microservices today requires more than just REST APIs.\r\n\r\nI explored how Spring WebFlux combined with RSocket enables non-blocking, real-time, and highly resilient systems using reactive programming principles.\r\n\r\nIf you're working on high-concurrency systems or modern microservices, this approach is worth understanding.\r\n\r\nJava, Microservices, ReactiveProgramming, WebFlux, RSocket, Backend, SystemDesign","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[113],"tags":[358,359,356,65,357,118,355,119,354,120],"class_list":["post-481","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-spring-boot-aws-microservices","tag-backpressure","tag-event-driven-systems-2","tag-java-reactive-programming","tag-microservices-architecture","tag-non-blocking-i-o","tag-project-reactor","tag-reactive-microservices","tag-reactive-streams","tag-rsocket","tag-spring-webflux"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building Reactive Microservices with Spring WebFlux &amp; RSocket - &lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;<\/title>\n<meta name=\"description\" content=\"Learn how to build reactive microservices using Spring WebFlux and RSocket. Explore non-blocking I\/O, backpressure, and scalable real-time communication.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Reactive Microservices with Spring WebFlux &amp; RSocket - &lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;\" \/>\n<meta property=\"og:description\" content=\"Learn how to build reactive microservices using Spring WebFlux and RSocket. Explore non-blocking I\/O, backpressure, and scalable real-time communication.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/\" \/>\n<meta property=\"og:site_name\" content=\"&lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-16T05:55:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2026\/05\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"HS\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"HS\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/\"},\"author\":{\"name\":\"HS\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#\\\/schema\\\/person\\\/d82781218ba30c34fa81b49e8393681e\"},\"headline\":\"Building Reactive Microservices with Spring WebFlux &amp; RSocket\",\"datePublished\":\"2026-05-16T05:55:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/\"},\"wordCount\":720,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#\\\/schema\\\/person\\\/d82781218ba30c34fa81b49e8393681e\"},\"image\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png\",\"keywords\":[\"backpressure\",\"event driven systems\",\"Java reactive programming\",\"Microservices Architecture\",\"non blocking I\\\/O\",\"Project Reactor\",\"reactive microservices\",\"Reactive Streams\",\"RSocket\",\"Spring WebFlux\"],\"articleSection\":[\"Java, Spring Boot, AWS, Microservices\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/\",\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/\",\"name\":\"Building Reactive Microservices with Spring WebFlux &amp; RSocket - &lt;&gt;HARSHAD&#039;s Dev Diary&lt;\\\/&gt;\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png\",\"datePublished\":\"2026-05-16T05:55:00+00:00\",\"description\":\"Learn how to build reactive microservices using Spring WebFlux and RSocket. Explore non-blocking I\\\/O, backpressure, and scalable real-time communication.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/#primaryimage\",\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png\",\"contentUrl\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/building-reactive-microservices-spring-webflux-rsocket\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building Reactive Microservices with Spring WebFlux &amp; RSocket\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/\",\"name\":\"Harshad's Dev Diary\",\"description\":\"HARSHAD&#039;s Dev Diary\",\"publisher\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#\\\/schema\\\/person\\\/d82781218ba30c34fa81b49e8393681e\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#\\\/schema\\\/person\\\/d82781218ba30c34fa81b49e8393681e\",\"name\":\"HS\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/about.jpg\",\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/about.jpg\",\"contentUrl\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/about.jpg\",\"width\":400,\"height\":400,\"caption\":\"HS\"},\"logo\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/about.jpg\"},\"sameAs\":[\"https:\\\/\\\/harshad-sonawane.com\\\/blog\"],\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building Reactive Microservices with Spring WebFlux &amp; RSocket - &lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;","description":"Learn how to build reactive microservices using Spring WebFlux and RSocket. Explore non-blocking I\/O, backpressure, and scalable real-time communication.","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:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/","og_locale":"en_US","og_type":"article","og_title":"Building Reactive Microservices with Spring WebFlux &amp; RSocket - &lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;","og_description":"Learn how to build reactive microservices using Spring WebFlux and RSocket. Explore non-blocking I\/O, backpressure, and scalable real-time communication.","og_url":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/","og_site_name":"&lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;","article_published_time":"2026-05-16T05:55:00+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2026\/05\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png","type":"image\/png"}],"author":"HS","twitter_card":"summary_large_image","twitter_misc":{"Written by":"HS","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/#article","isPartOf":{"@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/"},"author":{"name":"HS","@id":"https:\/\/harshad-sonawane.com\/blog\/#\/schema\/person\/d82781218ba30c34fa81b49e8393681e"},"headline":"Building Reactive Microservices with Spring WebFlux &amp; RSocket","datePublished":"2026-05-16T05:55:00+00:00","mainEntityOfPage":{"@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/"},"wordCount":720,"commentCount":0,"publisher":{"@id":"https:\/\/harshad-sonawane.com\/blog\/#\/schema\/person\/d82781218ba30c34fa81b49e8393681e"},"image":{"@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/#primaryimage"},"thumbnailUrl":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2026\/05\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png","keywords":["backpressure","event driven systems","Java reactive programming","Microservices Architecture","non blocking I\/O","Project Reactor","reactive microservices","Reactive Streams","RSocket","Spring WebFlux"],"articleSection":["Java, Spring Boot, AWS, Microservices"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/","url":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/","name":"Building Reactive Microservices with Spring WebFlux &amp; RSocket - &lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;","isPartOf":{"@id":"https:\/\/harshad-sonawane.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/#primaryimage"},"image":{"@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/#primaryimage"},"thumbnailUrl":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2026\/05\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png","datePublished":"2026-05-16T05:55:00+00:00","description":"Learn how to build reactive microservices using Spring WebFlux and RSocket. Explore non-blocking I\/O, backpressure, and scalable real-time communication.","breadcrumb":{"@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/#primaryimage","url":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2026\/05\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png","contentUrl":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2026\/05\/ChatGPT-Image-Apr-7-2026-04_07_50-PM.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/harshad-sonawane.com\/blog\/building-reactive-microservices-spring-webflux-rsocket\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/harshad-sonawane.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building Reactive Microservices with Spring WebFlux &amp; RSocket"}]},{"@type":"WebSite","@id":"https:\/\/harshad-sonawane.com\/blog\/#website","url":"https:\/\/harshad-sonawane.com\/blog\/","name":"Harshad's Dev Diary","description":"HARSHAD&#039;s Dev Diary","publisher":{"@id":"https:\/\/harshad-sonawane.com\/blog\/#\/schema\/person\/d82781218ba30c34fa81b49e8393681e"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/harshad-sonawane.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/harshad-sonawane.com\/blog\/#\/schema\/person\/d82781218ba30c34fa81b49e8393681e","name":"HS","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/02\/about.jpg","url":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/02\/about.jpg","contentUrl":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/02\/about.jpg","width":400,"height":400,"caption":"HS"},"logo":{"@id":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/02\/about.jpg"},"sameAs":["https:\/\/harshad-sonawane.com\/blog"],"url":"https:\/\/harshad-sonawane.com\/blog\/author\/admin\/"}]}},"jetpack_publicize_connections":[],"_links":{"self":[{"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/posts\/481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/comments?post=481"}],"version-history":[{"count":2,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/posts\/481\/revisions"}],"predecessor-version":[{"id":483,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/posts\/481\/revisions\/483"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/media\/484"}],"wp:attachment":[{"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/media?parent=481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/categories?post=481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/tags?post=481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}