public object GetValue() { if (disposedValue) { ThrowDisposedValue(); } if (_data == MultiArray <byte> .Empty) { return(null); } var type = string.IsNullOrWhiteSpace(_dataType) ? typeof(object) : Core.GetType(_dataType, false); if (string.IsNullOrWhiteSpace(_serializerMimeType)) { if (type == typeof(byte[])) { return(_data.AsArray()); } if (type == typeof(MultiArray <byte>)) { return(_data); } return(null); } var serializer = SerializerCache.GetOrAdd(_serializerMimeType, smt => CreateSerializer(smt)); var value = serializer.Deserialize(_data, type ?? typeof(object)); return(value); }
/// <inheritdoc /> /// <summary> /// On Send message data /// </summary> /// <param name="message">Response message instance</param> /// <param name="e">Event Args</param> protected override async Task <int> OnSendAsync(MultiArray <byte> message, RawRequestReceivedEventArgs e) { var queues = e.ResponseQueues; var replyTo = e.Metadata["ReplyTo"] ?? string.Empty; queues.Add(new MQConnection { Route = e.Sender.Route, Parameters = e.Sender.Parameters }); var senderOptions = Config.ResponseOptions.ServerSenderOptions; if (senderOptions is null) { throw new NullReferenceException("ServerSenderOptions is null."); } var header = KafkaQueueRawClient.CreateRawMessageHeader(e.CorrelationId, replyTo); var body = message.AsArray(); var response = true; foreach (var queue in e.ResponseQueues) { try { var producer = _rQueue.GetOrAdd(queue.Route, qRoute => { Core.Log.LibVerbose("New Producer from QueueClient"); if (string.IsNullOrEmpty(qRoute)) { throw new UriFormatException($"The route for the connection to {qRoute} is null."); } var options = new KafkaOptions(new Uri(qRoute)); var router = new BrokerRouter(options); return(Extensions.InvokeWithRetry(() => new Producer(router), 5000, int.MaxValue).WaitAsync()); }); if (!string.IsNullOrEmpty(replyTo)) { if (string.IsNullOrEmpty(queue.Name)) { Core.Log.LibVerbose("Sending {0} bytes to the Queue '{1}/{2}' with CorrelationId={3}", body.Length, queue.Route, replyTo, e.CorrelationId); await producer.SendMessageAsync(replyTo, new[] { new Message { Key = header, Value = body } }).ConfigureAwait(false); } else if (queue.Name.StartsWith(replyTo, StringComparison.Ordinal)) { Core.Log.LibVerbose("Sending {0} bytes to the Queue '{1}/{2}' with CorrelationId={3}", body.Length, queue.Route, queue.Name + "_" + replyTo, e.CorrelationId); await producer.SendMessageAsync(queue.Name + "_" + replyTo, new[] { new Message { Key = header, Value = body } }).ConfigureAwait(false); } } else { Core.Log.LibVerbose("Sending {0} bytes to the Queue '{1}/{2}' with CorrelationId={3}", body.Length, queue.Route, queue.Name, e.CorrelationId); await producer.SendMessageAsync(queue.Name, new[] { new Message { Key = header, Value = body } }).ConfigureAwait(false); } } catch (Exception ex) { response = false; Core.Log.Write(ex); } } return(response ? message.Count : -1); }