{"id":134333,"date":"2025-05-29T17:43:00","date_gmt":"2025-05-29T14:43:00","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=134333"},"modified":"2025-05-29T11:01:31","modified_gmt":"2025-05-29T08:01:31","slug":"spring-kafka-synchronous-request-reply-example","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html","title":{"rendered":"Spring Kafka Synchronous Request Reply Example"},"content":{"rendered":"<p>Apache Kafka is primarily designed for asynchronous, event-driven communication. However, there are cases when synchronous request-reply patterns are required\u2014such as retrieving a response from a service for a given request. Let us delve into understanding how Spring Kafka handles synchronous request-reply messaging.<\/p>\n<h2><a name=\"section-1\"><\/a>1. What is Apache Kafka?<\/h2>\n<p><a href=\"https:\/\/kafka.apache.org\/\" target=\"_blank\" rel=\"noopener\">Apache Kafka<\/a> is a distributed event streaming platform used for building real-time data pipelines and streaming applications. It enables the publishing, storing, and processing of streams of records in a fault-tolerant and scalable manner. Kafka is widely used for its high throughput, durability, and ability to handle large volumes of data with low latency.<\/p>\n<h3>1.1 Benefits of Apache Kafka<\/h3>\n<ul>\n<li>Scalability: Kafka supports horizontal scaling by adding more brokers to the cluster.<\/li>\n<li>Fault Tolerance: Data replication ensures message durability even if a broker fails.<\/li>\n<li>High Throughput: Kafka processes millions of messages per second with low latency.<\/li>\n<li>Durability: Messages are stored persistently, ensuring reliability.<\/li>\n<li>Flexibility: Kafka integrates seamlessly with big data and cloud-based platforms.<\/li>\n<\/ul>\n<h3>1.2 What is ReplyingKafkaTemplate?<\/h3>\n<p><code>ReplyingKafkaTemplate<\/code> is a specialized component in the Spring Kafka framework that simplifies implementing request-reply messaging patterns. It allows a producer to send a message and synchronously wait for a corresponding reply from a consumer, facilitating synchronous communication over Kafka\u2019s asynchronous messaging system.<\/p>\n<h2><a name=\"section-2\"><\/a>2. Code Example<\/h2>\n<p>This section demonstrates how to set up a local Kafka environment using Docker and integrate it with a Spring Boot application. We will cover the steps to configure Kafka and Zookeeper, create a Spring Boot project with Kafka dependencies, set up Kafka producer and consumer services, and expose a REST endpoint to send and receive messages through Kafka.<\/p>\n<h3>2.1 Kafka Setup on Docker<\/h3>\n<p>To set up a local development environment for Apache Kafka along with Zookeeper, you can use the following <code>docker-compose.yml<\/code> file.<\/p>\n<p>This configuration defines two services: <code>zookeeper<\/code> and <code>kafka<\/code>. The Zookeeper service uses the Confluent image and exposes the default client port 2181. The Kafka service depends on Zookeeper and uses the Confluent Kafka image. It maps port 9092 on the host for Kafka communication and sets several important environment variables: <code>KAFKA_BROKER_ID<\/code> is set to 1, <code>KAFKA_ZOOKEEPER_CONNECT<\/code> links Kafka to Zookeeper, <code>KAFKA_ADVERTISED_LISTENERS<\/code> makes the broker accessible via <code>localhost:9092<\/code>, and <code>KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR<\/code> is set to 1 for a single-broker setup.<\/p>\n<p>Here&#8217;s the full configuration:<\/p>\n<pre class=\"brush:plain; wrap-lines:false;\">services:\n  zookeeper:\n    image: confluentinc\/cp-zookeeper:7.2.1\n    environment:\n      ZOOKEEPER_CLIENT_PORT: 2181\n\n  kafka:\n    image: confluentinc\/cp-kafka:7.2.1\n    depends_on:\n      - zookeeper\n    ports:\n      - 9092:9092\n    environment:\n      KAFKA_BROKER_ID: 1\n      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181\n      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:\/\/localhost:9092\n      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1\n<\/pre>\n<p>Once saved, you can start the services in detached mode by running: <code>docker-compose up -d<\/code>.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<h3>2.2 Setting up the Project<\/h3>\n<p>To get started, use the <a href=\"https:\/\/start.spring.io\" target=\"_blank\" rel=\"noopener\">Spring Initializr<\/a> to generate a basic Spring Boot project. Ensure that you include the Kafka dependency during setup or add it manually to your <code>pom.xml<\/code> as shown below. This adds support for producing and consuming Kafka messages using Spring Kafka.<\/p>\n<pre class=\"brush:xml; wrap-lines:false;\">&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.kafka&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-kafka&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n<\/pre>\n<h3>2.3 Kafka Configuration<\/h3>\n<p>The configuration class below sets up Kafka producer and consumer factories, a Kafka template, and a replying Kafka template for request-reply messaging. The <code>bootstrapServers<\/code> value is injected from the application properties file. The <code>producerFactory<\/code> and <code>consumerFactory<\/code> beans define serialization and deserialization strategies. The <code>kafkaTemplate<\/code> is used to send messages, while the <code>ReplyingKafkaTemplate<\/code> and <code>KafkaMessageListenerContainer<\/code> are configured for handling synchronous replies. Two topics are declared: <code>request-topic<\/code> and <code>reply-topic<\/code>, representing the request and reply channels respectively.<\/p>\n<pre class=\"brush:java; wrap-lines:false;\">@Configuration\npublic class KafkaConfig {\n\n    @Value(\"${spring.kafka.bootstrap-servers}\")\n    private String bootstrapServers;\n\n    public static final String REQUEST_TOPIC = \"request-topic\";\n    public static final String REPLY_TOPIC = \"reply-topic\";\n\n    @Bean\n    public ProducerFactory&lt;String, String&gt; producerFactory() {\n        Map&lt;String, Object&gt; config = new HashMap&lt;&gt;();\n        config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);\n        config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);\n        config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);\n        return new DefaultKafkaProducerFactory&lt;&gt;(config);\n    }\n\n    @Bean\n    public ConsumerFactory&lt;String, String&gt; consumerFactory() {\n        Map&lt;String, Object&gt; config = new HashMap&lt;&gt;();\n        config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);\n        config.put(ConsumerConfig.GROUP_ID_CONFIG, \"group1\");\n        config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);\n        config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);\n        return new DefaultKafkaConsumerFactory&lt;&gt;(config);\n    }\n\n    @Bean\n    public KafkaTemplate&lt;String, String&gt; kafkaTemplate() {\n        return new KafkaTemplate&lt;&gt;(producerFactory());\n    }\n\n    @Bean\n    public ReplyingKafkaTemplate&lt;String, String, String&gt; replyingKafkaTemplate(\n            ProducerFactory&lt;String, String&gt; pf,\n            KafkaMessageListenerContainer&lt;String, String&gt; container) {\n        return new ReplyingKafkaTemplate&lt;&gt;(pf, container);\n    }\n\n    @Bean\n    public KafkaMessageListenerContainer&lt;String, String&gt; replyContainer(\n            ConsumerFactory&lt;String, String&gt; cf) {\n        ContainerProperties containerProperties = new ContainerProperties(REPLY_TOPIC);\n        return new KafkaMessageListenerContainer&lt;&gt;(cf, containerProperties);\n    }\n}\n<\/pre>\n<h3>2.4 Producer Service (Client)<\/h3>\n<p>The producer service, named <code>KafkaRequestClient<\/code>, is responsible for sending a message to the Kafka <code>request-topic<\/code> and awaiting a response from the <code>reply-topic<\/code> using a <code>ReplyingKafkaTemplate<\/code>. It constructs a <code>ProducerRecord<\/code>, adds the reply topic in the headers, sends the record, and blocks until a response is received.<\/p>\n<pre class=\"brush:java; wrap-lines:false;\">@Service\npublic class KafkaRequestClient {\n\n    @Autowired\n    private ReplyingKafkaTemplate&lt;String, String, String&gt; replyingKafkaTemplate;\n\n    public String sendAndReceive(String message) throws Exception {\n        ProducerRecord&lt;String, String&gt; record = new ProducerRecord&lt;&gt;(\n                KafkaConfig.REQUEST_TOPIC, null, message);\n        record.headers().add(new RecordHeader(KafkaHeaders.REPLY_TOPIC, \n            KafkaConfig.REPLY_TOPIC.getBytes()));\n\n        RequestReplyFuture&lt;String, String, String&gt; future = replyingKafkaTemplate.sendAndReceive(record);\n        ConsumerRecord&lt;String, String&gt; response = future.get();\n        return response.value();\n    }\n}\n<\/pre>\n<h3>2.5 Consumer Service (Server)<\/h3>\n<p>The consumer service, <code>KafkaRequestConsumer<\/code>, listens on the <code>request-topic<\/code> using the <code>@KafkaListener<\/code> annotation. When a message is received, it logs the request and returns a simple response string. This return value is automatically sent to the <code>reply-topic<\/code> due to Kafka&#8217;s request-reply mechanism.<\/p>\n<pre class=\"brush:java; wrap-lines:false;\">@Service\npublic class KafkaRequestConsumer {\n\n    @KafkaListener(topics = KafkaConfig.REQUEST_TOPIC)\n    public String handleRequest(String message) {\n        System.out.println(\"Received request: \" + message);\n        return \"Processed: \" + message;\n    }\n}\n<\/pre>\n<h3>2.6 REST Controller<\/h3>\n<p>To expose the Kafka producer functionality as an HTTP endpoint, a REST controller is defined with a <code>\/kafka\/request<\/code> GET API. It accepts a message as a query parameter, forwards it to Kafka via the <code>KafkaRequestClient<\/code>, and returns the processed response to the client.<\/p>\n<pre class=\"brush:java; wrap-lines:false;\">@RestController\n@RequestMapping(\"\/kafka\")\npublic class KafkaController {\n\n    @Autowired\n    private KafkaRequestClient kafkaRequestClient;\n\n    @GetMapping(\"\/request\")\n    public ResponseEntity&lt;String&gt; sendMessage(@RequestParam String msg) throws Exception {\n        String response = kafkaRequestClient.sendAndReceive(msg);\n        return ResponseEntity.ok(response);\n    }\n}\n<\/pre>\n<h3>2.7 Running and Output<\/h3>\n<p>Once Kafka and Zookeeper are running via Docker (as set up earlier), you can start the Spring Boot application to initiate Kafka request-reply communication. After the application is up, trigger the flow by hitting the REST endpoint shown below. The message will be published to the Kafka <code>request-topic<\/code>, processed by the consumer, and a response will be sent back via the <code>reply-topic<\/code>. The producer receives the reply and returns it as an HTTP response.<\/p>\n<h4>2.7.1 Hit the Endpoint<\/h4>\n<p>To verify that the Kafka request-reply setup is working as expected, start the Spring Boot application and invoke the REST endpoint shown below. This triggers the producer to send the message <code>hello<\/code> to Kafka, which is then consumed, processed, and replied back to the caller.<\/p>\n<pre class=\"brush:plain; wrap-lines:false;\">-- Endpoint \u2013 \nGET http:\/\/localhost:8080\/kafka\/request?msg=hello\n\n-- Console output \u2013\nReceived request: hello\n\n-- HTTP response --\nProcessed: hello\n<\/pre>\n<h2><a name=\"section-3\"><\/a>3. Conclusion<\/h2>\n<p>While Kafka is best suited for asynchronous event streaming, using <code>ReplyingKafkaTemplate<\/code> in Spring Kafka allows us to implement a clean request-reply communication model. This approach is useful for scenarios that require guaranteed processing and acknowledgment between services.<\/p>\n<p>However, be cautious when using synchronous patterns over Kafka\u2014they should not replace standard RPC mechanisms in highly time-sensitive applications.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apache Kafka is primarily designed for asynchronous, event-driven communication. However, there are cases when synchronous request-reply patterns are required\u2014such as retrieving a response from a service for a given request. Let us delve into understanding how Spring Kafka handles synchronous request-reply messaging. 1. What is Apache Kafka? Apache Kafka is a distributed event streaming platform &hellip;<\/p>\n","protected":false},"author":26931,"featured_media":118161,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[1349,30],"class_list":["post-134333","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-kafka","tag-spring"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Kafka Synchronous Request Reply Example - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Spring Kafka request reply synchronous: Learn how to implement synchronous request-reply messaging in Spring Kafka.\" \/>\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.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Kafka Synchronous Request Reply Example - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Spring Kafka request reply synchronous: Learn how to implement synchronous request-reply messaging in Spring Kafka.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-29T14:43:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/08\/apache-kafka-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Yatin Batra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yatin Batra\" \/>\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\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html\"},\"author\":{\"name\":\"Yatin Batra\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/cda31a4c1965373fed40c8907dc09b8d\"},\"headline\":\"Spring Kafka Synchronous Request Reply Example\",\"datePublished\":\"2025-05-29T14:43:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html\"},\"wordCount\":798,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/apache-kafka-logo.jpg\",\"keywords\":[\"Kafka\",\"Spring\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html\",\"name\":\"Spring Kafka Synchronous Request Reply Example - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/apache-kafka-logo.jpg\",\"datePublished\":\"2025-05-29T14:43:00+00:00\",\"description\":\"Spring Kafka request reply synchronous: Learn how to implement synchronous request-reply messaging in Spring Kafka.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/apache-kafka-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/apache-kafka-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-kafka-synchronous-request-reply-example.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring Kafka Synchronous Request Reply Example\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/cda31a4c1965373fed40c8907dc09b8d\",\"name\":\"Yatin Batra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Yatin.batra_.jpg\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Yatin.batra_.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Yatin.batra_.jpg\",\"caption\":\"Yatin Batra\"},\"description\":\"An experience full-stack engineer well versed with Core Java, Spring\\\/Springboot, MVC, Security, AOP, Frontend (Angular &amp; React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).\",\"sameAs\":[\"https:\\\/\\\/www.javacodegeeks.com\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/yatin-batra\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Kafka Synchronous Request Reply Example - Java Code Geeks","description":"Spring Kafka request reply synchronous: Learn how to implement synchronous request-reply messaging in Spring Kafka.","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.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html","og_locale":"en_US","og_type":"article","og_title":"Spring Kafka Synchronous Request Reply Example - Java Code Geeks","og_description":"Spring Kafka request reply synchronous: Learn how to implement synchronous request-reply messaging in Spring Kafka.","og_url":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2025-05-29T14:43:00+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/08\/apache-kafka-logo.jpg","type":"image\/jpeg"}],"author":"Yatin Batra","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Yatin Batra","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html"},"author":{"name":"Yatin Batra","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/cda31a4c1965373fed40c8907dc09b8d"},"headline":"Spring Kafka Synchronous Request Reply Example","datePublished":"2025-05-29T14:43:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html"},"wordCount":798,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/08\/apache-kafka-logo.jpg","keywords":["Kafka","Spring"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html","url":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html","name":"Spring Kafka Synchronous Request Reply Example - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/08\/apache-kafka-logo.jpg","datePublished":"2025-05-29T14:43:00+00:00","description":"Spring Kafka request reply synchronous: Learn how to implement synchronous request-reply messaging in Spring Kafka.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/08\/apache-kafka-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/08\/apache-kafka-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/spring-kafka-synchronous-request-reply-example.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring Kafka Synchronous Request Reply Example"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/cda31a4c1965373fed40c8907dc09b8d","name":"Yatin Batra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Yatin.batra_.jpg","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Yatin.batra_.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Yatin.batra_.jpg","caption":"Yatin Batra"},"description":"An experience full-stack engineer well versed with Core Java, Spring\/Springboot, MVC, Security, AOP, Frontend (Angular &amp; React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).","sameAs":["https:\/\/www.javacodegeeks.com"],"url":"https:\/\/www.javacodegeeks.com\/author\/yatin-batra"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/134333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/26931"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=134333"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/134333\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/118161"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=134333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=134333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=134333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}