internal Task <ReadOnlyMemory <byte> > Request(string serverId, ReadOnlyMemory <byte> readOnlyMemory, out long mid) { string str = CreateServerKey(serverId).ToLower(); var callmeta = new CallMeta(); mid = callmeta.MethodId; AddToMethodPool(callmeta); var basicProperties = _consumerchannel.CreateBasicProperties(); basicProperties.CorrelationId = callmeta.MethodId.ToString(); basicProperties.ReplyTo = _clientName; var policy = Policy.Handle <SocketException>() .Or <BrokerUnreachableException>() .WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) => { _logger.LogWarning("" + ex.Message); } ); policy.Execute(() => { _consumerchannel.BasicPublish(BROKER_NAME, str, basicProperties, readOnlyMemory.ToArray()); }); return(callmeta.Task); }
private void AddToMethodPool(CallMeta callmeta) { methodPoll.AddOrUpdate(callmeta.MethodId, callmeta, (x, y) => y); }