public IActionResult create([FromBody] EmployeeDTO employee) { try { // This needs to be checked against the partition assignment of response topic consumer // in future enhancements // This could affect response time var computePartition = _configuration.GetValue <bool>("ConfigProperties:Kafka:ComputePartition"); string requestId = _consumer.GenerateRequestId(computePartition); _logger.LogInformation("Computed request id using assigned partition from response topic {requestId}", requestId); // var reader = new StreamReader(Request.Body); _logger.LogInformation("Employee {firstname} {lastname} {middlename}", employee.FirstName, employee.LastName, employee.MiddleInitial); var value = new EmployeeEvent(); value.status = StatusType.REQUESTED; value.employee = _mapper.Map <Employee>(employee); value.employee.employeeID = requestId; //value.employee.nameFull = employee.nameFirst + employee.nameMiddle + employee.nameLast; value.action = ActionType.CREATE; _logger.LogInformation("Producing to {topicName}, key= {requestId}, value= {value}", topicName, requestId, value); _producer.ProduceRecord(topicName, requestId, value); EventWaitHandle syncObject = new AutoResetEvent(false); _synchronzationUtil.AddLockObject(requestId, syncObject); syncObject.WaitOne(); return(CreatedAtRoute("GetEmployeeById", new { id = _consumer.GetResponseById(requestId) })); } catch (Exception e) { _logger.LogError("Exception writing to kafka message {message}, stack trace {stack}", e.Message, e.StackTrace); return(this.StatusCode(StatusCodes.Status500InternalServerError, "Exception writing to kafka")); } }