Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 private void AddToMethodPool(CallMeta callmeta)
 {
     methodPoll.AddOrUpdate(callmeta.MethodId, callmeta, (x, y) => y);
 }