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()); } }
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); } } }
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()); } }
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); }