public static async Task Run(TimerInfo getScheduledReadEnergyEarthMessagesTimer, ICollector <string> errormessage, TraceWriter log)
        {
            if (getScheduledReadEnergyEarthMessagesTimer.IsPastDue)
            {
                log.Verbose("Timer is running late!", "JE.RMS.Services.ScheduledReadEnergyEarthMessagesFromQueue");
            }

            try
            {
                var connectionString = ConfigurationManager.AppSettings["MyServiceBusReader"].ToString();

                SubscriptionClient client = SubscriptionClient.CreateFromConnectionString(connectionString, "fulfillmentrequest", "EnergyEarthSubscription");

                int batchSize            = Convert.ToInt32(ConfigurationManager.AppSettings["ReadEnergyEarthMessageBatchSize"].ToString());
                var brokeredMessagesList = client.ReceiveBatch(1);

                List <Guid> messageLockTokenList = new List <System.Guid>();

                if (brokeredMessagesList.Count() > 0)
                {
                    foreach (BrokeredMessage message in brokeredMessagesList)
                    {
                        var raw = message.GetBody <string>();
                        var RewardFulfillmentRequestList = JsonConvert.DeserializeObject <RewardFulfillmentRequestList>(raw);

                        using (HttpClient httpClient = new HttpClient())
                        {
                            //Add Basic Authentication header
                            httpClient.BaseAddress = new Uri(ConfigurationManager.AppSettings["ProcessFulfillmentUrl"].ToString());

                            //log.Verbose($"Calling Update point status API, UserId : {CustomerUniqueId}, with Status : {PointStatus.Status}", "JE.RMS.Services.ProcessFulfillmentForEnergyEarth");
                            var response = await httpClient.PostAsJsonAsync(string.Empty, RewardFulfillmentRequestList);

                            if (response.IsSuccessStatusCode)
                            {
                                log.Verbose($"Success : Process fulfillment for EE", "JE.RMS.Services.ScheduledReadEnergyEarthMessagesFromQueue");
                            }
                            else
                            {
                                log.Error($"Error : Process fulfillment for EE", null, "JE.RMS.Services.ScheduledReadEnergyEarthMessagesFromQueue");
                            }
                        }
                        messageLockTokenList.Add(message.LockToken);
                    }

                    client.CompleteBatch(messageLockTokenList);
                    log.Verbose($"Completed : Process fulfillment for EE batch", "JE.RMS.Services.ScheduledReadEnergyEarthMessagesFromQueue");
                }
            }
            catch (Exception ex)
            {
                log.Error("Something went wrong while ScheduledReadEnergyEarthMessagesFromQueue", ex, "JE.RMS.Services.ScheduledReadEnergyEarthMessagesFromQueue");
                errormessage.Add(JsonConvert.SerializeObject(ex).ToString());
            }
        }
Esempio n. 2
0
        public void ProcessMessages <T>(
            SubscriptionClient subscriptionClient,
            Action <IEnumerable <T> > messagesReceived,
            BrokeredMessage[] brokeredMessages) where T : SubscriptionMessage
        {
            if (brokeredMessages.Any())
            {
                log.Info("Wrapping messages for consumption");

                var wrappedMessages         = brokeredMessages.Select(x => (T)Activator.CreateInstance(typeof(T), x));
                var brokeredMessageWrappers = wrappedMessages as T[] ?? wrappedMessages.ToArray();

                try
                {
                    log.Info("Calling message consumer");

                    messagesReceived.Invoke(brokeredMessageWrappers);

                    log.Info("Checking completion status");

                    var completionTokens = brokeredMessageWrappers.Where(x => !x.IsActioned).Select(x => x.LockToken);

                    var lockTokens = completionTokens as Guid[] ?? completionTokens.ToArray();

                    if (lockTokens.Any())
                    {
                        log.Info("Completing batch");
                        subscriptionClient.CompleteBatch(lockTokens);
                    }
                }
                catch (Exception ex)
                {
                    this.log.ErrorException("Exception encountered processing messages", ex);
                }
            }
        }
Esempio n. 3
0
        public static async void Run(TimerInfo rewardsResponseTimer, ICollector <string> errormessage, TraceWriter log)
        {
            log.Verbose($"C# timer function processed a request.", "JE.RMS.Services.ScheduledReadRewardsRequestRecieved");

            try
            {
                //Service bus queue names and connection stringsAllFulfillmentResponseSubscription
                var connectionString = ConfigurationManager.AppSettings["MyServiceBusReader"].ToString();
                SubscriptionClient AllFulfillmentResponseSubscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionString, "fulfillmentresponse", "AllFulfillmentResponseSubscription");
                var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
                int BatchSize        = Convert.ToInt32(ConfigurationManager.AppSettings["RewardFulfillmentResponseBatchSize"]);
                IEnumerable <BrokeredMessage> RecievedMessage = null;
                long MessageCount = namespaceManager.GetSubscription("fulfillmentresponse", "AllFulfillmentResponseSubscription").MessageCount;
                if (MessageCount > 0)
                {
                    RecievedMessage = AllFulfillmentResponseSubscriptionClient.ReceiveBatch(BatchSize);
                }
                log.Verbose($"After the reading of queue message = {MessageCount}", "JE.RMS.Services.ScheduledReadRewardsRequestRecieved");
                List <Guid> messageLockTokenList = new List <System.Guid>();
                if (RecievedMessage != null && RecievedMessage.Count() > 0)
                {
                    foreach (BrokeredMessage message in RecievedMessage)
                    {
                        var responsemessage = message.GetBody <FulfillmentResponse>();
                        //var responsemessage = JsonConvert.DeserializeObject<FulfillmentResponse>(raw);

                        log.Verbose($"C# trigger queue function processed a request. inputmessage={responsemessage}", "JE.RMS.Services.OnRewardsResponseRecieved");
                        #region Update Audit Fields
                        //Update timestapm in Audit fields
                        List <SqlParameter> AuditParam = new List <SqlParameter>();
                        AuditParam.Add(new SqlParameter("@RMSRewardID", responsemessage.RMSRewardID));

                        var RMSRewardID = MSSQLConnection.ExecuteStoredProcedure <string>(USPContstants.UpdateAuditFieldsInRewardsTrx, AuditParam);
                        log.Verbose($"FulfillmentResponseTimestamp updated successfully. RMSRewardID={RMSRewardID[0]}", "JE.RMS.Services.OnRewardsResponseRecieved");
                        string RewardTrxStatus = "Fulfillment completed";
                        if (responsemessage.Status == "Fail")
                        {
                            RewardTrxStatus = "Error";
                        }

                        List <SqlParameter> MessageLogParams = new List <SqlParameter>();
                        MessageLogParams.Add(new SqlParameter("@RMSRewardID", responsemessage.RMSRewardID));
                        MessageLogParams.Add(new SqlParameter("@MessageType", MessageType.RewardFulfillmentResponse.GetDescription()));
                        MessageLogParams.Add(new SqlParameter("@IPAddress", responsemessage.ClientIP));
                        MessageLogParams.Add(new SqlParameter("@Message", JsonConvert.SerializeObject(responsemessage)));
                        MessageLogParams.Add(new SqlParameter("@RewardsTrxID", null));
                        var ErrorMessageLogID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.SaveMessageLog, MessageLogParams);
                        log.Verbose($"MessageLog stored successfully. MessageLogID={ErrorMessageLogID[0]}", "JE.RMS.Services.ProcessFulfillmentForEnergyEarth");

                        ////Call stored procedure to Save RewardTrxChangeLog
                        List <SqlParameter> RewardTrxChangeLogParams = new List <SqlParameter>();
                        RewardTrxChangeLogParams.Add(new SqlParameter("@RMSRewardID", responsemessage.RMSRewardID));
                        RewardTrxChangeLogParams.Add(new SqlParameter("@RewardTrxStatus", RewardTrxStatus));
                        RewardTrxChangeLogParams.Add(new SqlParameter("@Comment", string.Empty));
                        RewardTrxChangeLogParams.Add(new SqlParameter("@RewardsTrxID", null));

                        var RewardTrxChangeLogID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.SaveRewardTrxChangeLog, RewardTrxChangeLogParams);
                        log.Verbose($"RewardTrxChangeLog stored successfully. RewardTrxChangeLogID={RewardTrxChangeLogID[0]}", "JE.RMS.Services.OnRewardsResponseRecieved");
                        #endregion
                        messageLockTokenList.Add(message.LockToken);
                    }
                    AllFulfillmentResponseSubscriptionClient.CompleteBatch(messageLockTokenList);
                }
            }
            catch (Exception ex)
            {
                log.Error($"Exception ={ex}", ex, "JE.RMS.Services.OnRewardsRequestRecieved");
                errormessage.Add(JsonConvert.SerializeObject(ex).ToString());
            }
        }
Esempio n. 4
0
        public static RewardFulfillmentResponseList GetMessagesFromSubscription(long FulfillmentChannelID, RewardFulfillmentResponseList resp, TraceWriter log)
        {
            IEnumerable <BrokeredMessage> RecievedMessage = null;
            long MessageCount = 0;

            if (resp.RewardFulfillmentRequest == null)
            {
                resp.RewardFulfillmentRequest = new List <RewardFulfillmentRequest>();
            }
            BatchSize = BatchSize - resp.RewardFulfillmentRequest.Count;
            if (FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.GBASSTariff)
            {
                MessageCount = namespaceManager.GetSubscription("fulfillmentrequest", "GBASSTariffSubscription").MessageCount;
                if (MessageCount > 0)
                {
                    RecievedMessage = GBASSTariffSubscription.ReceiveBatch(BatchSize, new TimeSpan(0, 0, 0));
                }
            }
            else if (FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.GBASSCTLAdj)
            {
                MessageCount = namespaceManager.GetSubscription("fulfillmentrequest", "GBASSCTLAdjSubscription").MessageCount;
                if (MessageCount > 0)
                {
                    RecievedMessage = GBASSCTLAdjSubscription.ReceiveBatch(BatchSize, new TimeSpan(0, 0, 0));
                }
            }
            else if (FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.Cheque)
            {
                MessageCount = namespaceManager.GetSubscription("fulfillmentrequest", "SmartConnectSubscription").MessageCount;
                if (MessageCount > 0)
                {
                    RecievedMessage = SmartConnectSubscriptionClient.ReceiveBatch(BatchSize, new TimeSpan(0, 0, 0));
                }
            }
            List <Guid> messageLockTokenList = new List <System.Guid>();

            resp.HasMoreMessages = false;
            if (RecievedMessage != null && RecievedMessage.Count() > 0)
            {
                foreach (BrokeredMessage message in RecievedMessage)
                {
                    var    raw = message.GetBody <string>();
                    var    RewardFulfillmentRequestObj = JsonConvert.DeserializeObject <RewardFulfillmentRequestList>(raw);
                    string RMSRewardID = RewardFulfillmentRequestObj.RewardFulfillmentRequest.RMSRewardID;
                    ////Call stored procedure to Update RewardTrx
                    List <SqlParameter> RewardTrxParams = new List <SqlParameter>();
                    RewardTrxParams.Add(new SqlParameter("@RMSRewardID", RMSRewardID));
                    var UpdatedRewardTrxID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.UpdateProcessFulfillmentTimestamp, RewardTrxParams).FirstOrDefault();
                    log.Verbose($"RewardTrx updated successfully. RewardTrID={UpdatedRewardTrxID}", "JE.RMS.Services.GetRewardFulfillmentRequest");
                    resp.RewardFulfillmentRequest.Add(RewardFulfillmentRequestObj.RewardFulfillmentRequest);
                    messageLockTokenList.Add(message.LockToken);
                }

                if (FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.GBASSTariff)
                {
                    GBASSTariffSubscription.CompleteBatch(messageLockTokenList);
                }
                else if (FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.GBASSCTLAdj)
                {
                    GBASSCTLAdjSubscription.CompleteBatch(messageLockTokenList);
                }
                else if (FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.Cheque)
                {
                    SmartConnectSubscriptionClient.CompleteBatch(messageLockTokenList);
                }
            }

            resp.HasMoreMessages = MessageCount > resp.RewardFulfillmentRequest.Count ? true : false;
            if (resp.HasMoreMessages && resp.RewardFulfillmentRequest.Count < RepeatCallSize)
            {
                GetMessagesFromSubscription(FulfillmentChannelID, resp, log);
            }
            resp.TotalRecord = MessageCount;
            return(resp);
        }