public Task StartAsync(CancellationToken stoppingToken)
 {
     _logger.Info("Starting background services...");
     SendTransaction(null);
     _timer = new Timer(SendTransaction, null, TimeSpan.Zero, TimeSpan.FromMinutes(60));
     return(Task.CompletedTask);
 }
Exemplo n.º 2
0
        private void Connect()
        {
            _logger.Info("Attempting initial connection to RabbitMQ...");

            var connectionRetries = 0;
            var connected         = ConnectToQueue();

            if (!connected)
            {
                _logger.Info($"Initial connection to RabbitMQ failed. Beginning retries [MAX = {_queueConnectionSettings.Value.MaxConnectionRetries}]...");
            }

            while (CanRetry(connected, connectionRetries))
            {
                connectionRetries++;
                _logger.Info($"Attempting {connectionRetries} connection to RabbitMQ...");

                connected = ConnectToQueue();

                if (CanRetry(connected, connectionRetries))
                {
                    _logger.Info($"Connection attempt {connectionRetries} to RabbitMQ failed. Will retry in {_queueConnectionSettings.Value.ConnectionRetryWaitSeconds} seconds...");
                    var task = Task.Delay(new TimeSpan(0, 0, 0, _queueConnectionSettings.Value.ConnectionRetryWaitSeconds));
                    task.Wait();
                }
                else
                {
                    _logger.Info($"Connection attempt {connectionRetries} to RabbitMQ failed. Max retries of {_queueConnectionSettings.Value.MaxConnectionRetries} reached. Will not retry.");
                }
            }

            if (!connected)
            {
                _logger.Info("Application could not successfully connected to RabbitMQ.");
                throw new Exception("Unable to connect to RabbitMQ");
            }

            _logger.Info("Application has successfully connected to RabbitMQ.");
        }
Exemplo n.º 3
0
        public T InvokeApi <T>(string url, ApiRequestData data, IApiLogger logger)
        {
            string value = "";

            try
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
                request.Credentials = CredentialCache.DefaultCredentials;

                request.Timeout = data.requestTimeout;

                // headers
                if (data.acceptHeader != null)
                {
                    request.Accept = data.acceptHeader;
                }

                foreach (KeyValuePair <string, string> header in data.headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }

                request.Method = data.method.ToString();

                //處理POST資料
                if (data.method == ApiRequestData.Method.POST ||
                    data.method == ApiRequestData.Method.PUT)
                {
                    var paramBytes = Encoding.UTF8.GetBytes(data.postData);


                    request.ContentType   = data.contentTypeText;
                    request.ContentLength = paramBytes.Length;
                    using (var stream = request.GetRequestStream())
                    {
                        stream.Write(paramBytes, 0, paramBytes.Length);
                    }
                }

                logger.Info($"{url} req: {data.postData}");

                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    //HttpStatusCode=200才算呼叫成功
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        using (var sr = new StreamReader(response.GetResponseStream()))
                        {
                            value = sr.ReadToEnd();
                        }
                    }
                    else
                    {
                        throw new Exception(((int)response.StatusCode).ToString() + ":" + response.StatusDescription);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error($"invokeApi {ex.ToString()}");
            }

            logger.Info($"{url} resp: {value}");

            return(JsonConvert.DeserializeObject <T>(value));
        }