{"id":3828,"date":"2025-12-24T10:00:55","date_gmt":"2025-12-24T15:00:55","guid":{"rendered":"https:\/\/www.mymiller.name\/wordpress\/?p=3828"},"modified":"2025-12-24T10:00:55","modified_gmt":"2025-12-24T15:00:55","slug":"load-balancing-your-microservices-configuring-spring-cloud-gateway-with-spring-discovery-server","status":"publish","type":"post","link":"https:\/\/www.mymiller.name\/wordpress\/spring-gateway\/load-balancing-your-microservices-configuring-spring-cloud-gateway-with-spring-discovery-server\/","title":{"rendered":"Load Balancing Your Microservices: Configuring Spring Cloud Gateway with Spring Discovery Server"},"content":{"rendered":"\n<div class=\"wp-block-jetpack-markdown\"><p>In a microservices architecture, ensuring high availability and distributing traffic evenly across multiple instances of a service is paramount. Spring Cloud Gateway, when integrated with a Spring Discovery Server (like Netflix Eureka, Consul, or Spring Cloud Service Registry), provides a powerful and straightforward way to achieve client-side load balancing without requiring complex manual configurations.<\/p>\n<p>This article will guide you through the steps of configuring Spring Cloud Gateway to automatically discover and load balance requests to your backend microservices registered with a Spring Discovery Server.<\/p>\n<p><strong>Prerequisites:<\/strong><\/p>\n<ul>\n<li>\n<p>A running Spring Cloud Gateway application.<\/p>\n<\/li>\n<li>\n<p>One or more instances of your backend microservices (e.g., a Spring Data REST service) registered with a Spring Discovery Server.<\/p>\n<\/li>\n<li>\n<p>You\u2019ve added the necessary dependencies for Spring Cloud Gateway and your chosen Discovery Client to your Gateway\u2019s <code>pom.xml<\/code> or <code>build.gradle<\/code>:<\/p>\n<p><strong>For Netflix Eureka:<\/strong><\/p>\n<pre><code class=\"language-xml\">&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-cloud-starter-gateway&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-cloud-starter-netflix-eureka-client&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n<\/code><\/pre>\n<pre><code class=\"language-gradle\">implementation 'org.springframework.cloud:spring-cloud-starter-gateway'\nimplementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'\n<\/code><\/pre>\n<p><strong>For Consul:<\/strong><\/p>\n<pre><code class=\"language-xml\">&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-cloud-starter-gateway&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-cloud-starter-consul-discovery&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n<\/code><\/pre>\n<pre><code class=\"language-gradle\">implementation 'org.springframework.cloud:spring-cloud-starter-gateway'\nimplementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery'\n<\/code><\/pre>\n<p><strong>(Similarly for other Discovery Clients like ZooKeeper or Spring Cloud Service Registry)<\/strong><\/p>\n<\/li>\n<\/ul>\n<p><strong>Configuration in Spring Cloud Gateway<\/strong><\/p>\n<p>The key to enabling load balancing with a Discovery Server in Spring Cloud Gateway lies in how you define the <code>uri<\/code> for your routes. Instead of specifying a direct URL to a specific instance, you use the <strong>logical service ID<\/strong> registered with the Discovery Server, prefixed with <code>lb:\/\/<\/code>.<\/p>\n<p>Open your Spring Cloud Gateway\u2019s <code>application.yml<\/code> or <code>application.properties<\/code> file and define your routes like this:<\/p>\n<p><strong>Example (<code>application.yml<\/code>):<\/strong><\/p>\n<pre><code class=\"language-yaml\">spring:\n  cloud:\n    gateway:\n      routes:\n        - id: product-service-route\n          uri: lb:\/\/product-service # Load balance across instances of 'product-service'\n          predicates:\n            - Path=\/products\/**\n        - id: order-service-route\n          uri: lb:\/\/order-service   # Load balance across instances of 'order-service'\n          predicates:\n            - Path=\/orders\/**\n<\/code><\/pre>\n<p><strong>Explanation:<\/strong><\/p>\n<ul>\n<li><strong><code>uri: lb:\/\/product-service<\/code><\/strong>: This is the crucial part.\n<ul>\n<li><code>lb:\/\/<\/code>: This scheme tells Spring Cloud Gateway to use its <strong>LoadBalancerClient<\/strong> to resolve the service ID.<\/li>\n<li><code>product-service<\/code>: This <strong>must match the <code>spring.application.name<\/code><\/strong> of your <code>product-service<\/code> as registered with the Discovery Server. Spring Cloud Gateway will query the Discovery Server for all available instances of the service with this ID.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>predicates: - Path=\/products\/**<\/code><\/strong>: This standard Spring Cloud Gateway predicate defines that requests with paths starting with <code>\/products\/<\/code> will be routed to the <code>product-service<\/code>.<\/li>\n<li>Similarly, the <code>order-service-route<\/code> will load balance across all instances of the service registered as <code>order-service<\/code>.<\/li>\n<\/ul>\n<p><strong>How it Works Behind the Scenes:<\/strong><\/p>\n<ol>\n<li><strong>Discovery Client in Gateway:<\/strong> Your Spring Cloud Gateway application, by including the Discovery Client dependency (e.g., <code>spring-cloud-starter-netflix-eureka-client<\/code>), registers itself with the Discovery Server (although it doesn\u2019t typically need to be discoverable by other services). More importantly, it uses the Discovery Client to query the server for information about other registered services.<\/li>\n<li><strong>Service Registration:<\/strong> Your backend microservice instances (e.g., instances of <code>product-service<\/code>) register themselves with the Discovery Server upon startup, providing their service ID (<code>spring.application.name<\/code>), IP address, port, and health status.<\/li>\n<li><strong>Route Resolution:<\/strong> When a request comes into Spring Cloud Gateway for a path matching a route with a <code>lb:\/\/<\/code> URI, the Gateway\u2019s <strong>LoadBalancerClient<\/strong> (provided by your chosen Discovery Client integration) does the following:\n<ul>\n<li><strong>Resolves the Service ID:<\/strong> It looks up the service ID (e.g., <code>product-service<\/code>) in the Discovery Server.<\/li>\n<li><strong>Retrieves Instance List:<\/strong> It gets a list of all healthy and available instances of that service, along with their network addresses.<\/li>\n<li><strong>Load Balancing:<\/strong> It uses a configured load balancing strategy (the default is often a round-robin approach) to select one of the available instances.<\/li>\n<li><strong>Forwarding the Request:<\/strong> The Gateway then forwards the incoming request to the chosen instance of the backend service.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Automatic Updates:<\/strong> The LoadBalancerClient typically caches the list of service instances and periodically updates it by querying the Discovery Server. This ensures that the Gateway is aware of new instances, removed instances, and the health status of existing instances.<\/li>\n<\/ol>\n<p><strong>Customizing Load Balancing Strategies (Optional):<\/strong><\/p>\n<p>While the default load balancing strategy (usually round-robin) is often sufficient, you can customize it if needed. Spring Cloud LoadBalancer (a more modern load balancing abstraction in Spring Cloud) offers various strategies like random, weighted, and more.<\/p>\n<p>To use Spring Cloud LoadBalancer (if you\u2019re not already implicitly using it with your Discovery Client), you might need to include its starter:<\/p>\n<pre><code class=\"language-xml\">&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-cloud-starter-loadbalancer&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n<\/code><\/pre>\n<pre><code class=\"language-gradle\">implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'\n<\/code><\/pre>\n<p>You can then configure specific load balancer strategies per service in your <code>application.yml<\/code>:<\/p>\n<pre><code class=\"language-yaml\">spring:\n  cloud:\n    gateway:\n      routes:\n        - id: product-service-route\n          uri: lb:\/\/product-service\n          predicates:\n            - Path=\/products\/**\n        - id: order-service-route\n          uri: lb:\/\/order-service\n          predicates:\n            - Path=\/orders\/**\n    loadbalancer:\n      clients:\n        product-service:\n          configurations:\n            - com.example.loadbalancer.CustomProductLoadBalancerConfig # Your custom configuration\n        order-service:\n          # Use default load balancing for order-service\n<\/code><\/pre>\n<p>And create a configuration class (example for a random strategy):<\/p>\n<pre><code class=\"language-java\">package com.example.loadbalancer;\n\nimport org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;\nimport org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;\nimport org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;\nimport org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.core.env.Environment;\n\n@Configuration\npublic class CustomProductLoadBalancerConfig {\n\n    @Bean\n    public ReactorLoadBalancer&lt;Object&gt; randomLoadBalancer(Environment environment,\n                                                           LoadBalancerClientFactory loadBalancerClientFactory) {\n        String serviceId = environment.getProperty(LoadBalancerClientFactory.NAME_KEY);\n        return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(serviceId,\n                ServiceInstanceListSupplier.class),\n                serviceId);\n    }\n}\n<\/code><\/pre>\n<p><strong>Benefits of Load Balancing with Discovery Server and Gateway:<\/strong><\/p>\n<ul>\n<li><strong>Automatic Instance Discovery:<\/strong> Gateway automatically finds and uses available service instances.<\/li>\n<li><strong>Dynamic Scaling:<\/strong> As you scale your backend services up or down, the Gateway automatically adjusts its load balancing targets.<\/li>\n<li><strong>Health Checks Integration:<\/strong> Gateway typically considers only healthy instances for load balancing, improving reliability.<\/li>\n<li><strong>Simplified Configuration:<\/strong> Using the <code>lb:\/\/<\/code> URI scheme makes load balancing configuration incredibly easy.<\/li>\n<li><strong>Centralized Routing:<\/strong> Gateway acts as a single entry point, simplifying client-side interactions.<\/li>\n<\/ul>\n<p><strong>Conclusion:<\/strong><\/p>\n<p>Integrating Spring Cloud Gateway with a Spring Discovery Server provides a robust and efficient mechanism for load balancing traffic across your microservices. By simply using the <code>lb:\/\/<\/code> URI scheme in your route definitions, you can leverage the power of client-side load balancing without complex manual configurations. This ensures high availability, improves performance, and simplifies the management of your distributed system. Remember to ensure that the service IDs in your Gateway routes match the <code>spring.application.name<\/code> of your backend services registered with the Discovery Server.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":3853,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","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":[464],"tags":[],"series":[],"class_list":["post-3828","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-spring-gateway"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/04\/meditation-3814069_1280.avif","jetpack-related-posts":[{"id":3441,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_discovery\/spring-cloud-gateway-with-spring-cloud-discovery\/","url_meta":{"origin":3828,"position":0},"title":"Spring Cloud Gateway with Spring Cloud Discovery","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Spring Cloud Gateway and Spring Cloud Discovery are powerful tools for building microservices architectures. Spring Cloud Gateway acts as an API gateway, routing requests to the appropriate microservices. Spring Cloud Discovery provides a registry for microservices, enabling dynamic service discovery and load balancing. In this comprehensive guide, we'll delve into\u2026","rel":"","context":"In &quot;Spring Discovery&quot;","block_context":{"text":"Spring Discovery","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_discovery\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/trees-2900064_640.jpg?fit=640%2C427&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/trees-2900064_640.jpg?fit=640%2C427&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/trees-2900064_640.jpg?fit=640%2C427&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3721,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_discovery\/load-balancing-in-spring-gateway-discovery\/","url_meta":{"origin":3828,"position":1},"title":"Load Balancing in Spring: Gateway &amp; Discovery","author":"Jeffery Miller","date":"December 17, 2025","format":false,"excerpt":"Load balancing is crucial in modern applications to distribute traffic across multiple instances of a service, ensuring high availability and fault tolerance. Spring provides robust mechanisms for load balancing, both at the gateway level and through service discovery. This blog post will explore both approaches, highlighting their differences and use\u2026","rel":"","context":"In &quot;Spring Discovery&quot;","block_context":{"text":"Spring Discovery","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_discovery\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/09\/network-8198745_1280-jpg.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/09\/network-8198745_1280-jpg.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/09\/network-8198745_1280-jpg.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/09\/network-8198745_1280-jpg.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/09\/network-8198745_1280-jpg.avif 3x"},"classes":[]},{"id":3438,"url":"https:\/\/www.mymiller.name\/wordpress\/spring\/architecting-with-spring-and-spring-cloud\/","url_meta":{"origin":3828,"position":2},"title":"Architecting with Spring and Spring Cloud","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Building a Multi-Service Architecture with Spring 3.1.x and Spring Cloud: Unlocking the Power of Microservices In the ever-evolving landscape of software development, microservices have emerged as a powerful architectural paradigm, enabling organizations to build scalable, resilient, and agile applications. Spring, a widely adopted Java framework, provides a comprehensive suite of\u2026","rel":"","context":"In &quot;Spring&quot;","block_context":{"text":"Spring","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/field-5236879_640.jpg?fit=640%2C360&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/field-5236879_640.jpg?fit=640%2C360&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/field-5236879_640.jpg?fit=640%2C360&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3830,"url":"https:\/\/www.mymiller.name\/wordpress\/spring-gateway\/scaling-the-gatekeeper-load-balancing-multiple-instances-of-spring-cloud-gateway\/","url_meta":{"origin":3828,"position":3},"title":"Scaling the Gatekeeper: Load Balancing Multiple Instances of Spring Cloud Gateway","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"As your microservices ecosystem grows and traffic increases, a single instance of Spring Cloud Gateway might become a bottleneck or a single point of failure. To ensure high availability, fault tolerance, and improved performance, you\u2019ll likely need to run multiple instances of your Spring Cloud Gateway and load balance traffic\u2026","rel":"","context":"In &quot;Spring Gateway&quot;","block_context":{"text":"Spring Gateway","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring-gateway\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/network-3152677_640.jpg?fit=640%2C427&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/network-3152677_640.jpg?fit=640%2C427&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/network-3152677_640.jpg?fit=640%2C427&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3826,"url":"https:\/\/www.mymiller.name\/wordpress\/spring-gateway\/resilient-gateways-implementing-circuit-breakers-for-spring-data-rest-services-with-spring-cloud-gateway\/","url_meta":{"origin":3828,"position":4},"title":"Resilient Gateways: Implementing Circuit Breakers for Spring Data REST Services with Spring Cloud Gateway","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"In a microservice architecture, services inevitably encounter transient failures \u2013 network hiccups, temporary overload, or slow responses from dependencies. Without proper handling, these failures can cascade, leading to a degraded user experience and even system-wide outages. This is where the circuit breaker pattern comes into play, providing a mechanism to\u2026","rel":"","context":"In &quot;Spring Gateway&quot;","block_context":{"text":"Spring Gateway","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring-gateway\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8314612_640.jpg?fit=640%2C480&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8314612_640.jpg?fit=640%2C480&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8314612_640.jpg?fit=640%2C480&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3447,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_discovery\/discovery-first-bootstrap\/","url_meta":{"origin":3828,"position":5},"title":"Discovery First Bootstrap","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"In the realm of microservices architecture, effective configuration management is crucial for ensuring the seamless operation and dynamic adaptability of distributed applications. Spring Cloud Config Server and Spring Cloud Discovery Server have emerged as powerful tools for addressing this challenge. While the default \"Config First\" mode offers a straightforward approach,\u2026","rel":"","context":"In &quot;Spring Discovery&quot;","block_context":{"text":"Spring Discovery","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_discovery\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/network-3152677_640.jpg?fit=640%2C427&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/network-3152677_640.jpg?fit=640%2C427&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/network-3152677_640.jpg?fit=640%2C427&ssl=1&resize=525%2C300 1.5x"},"classes":[]}],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/comments?post=3828"}],"version-history":[{"count":1,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3828\/revisions"}],"predecessor-version":[{"id":3829,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3828\/revisions\/3829"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media\/3853"}],"wp:attachment":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media?parent=3828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/categories?post=3828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/tags?post=3828"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/series?post=3828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}