-
-
Notifications
You must be signed in to change notification settings - Fork 15
Open
Description
I am trying to get the replayid from the cosmos database before creating a Bayeux client object. I am not able to handshake when after bayeuxclient.Handshake(). The same code is working fine when I am not using the cosmos db call. Please find below code snippet.
var authResponse = await _authenticateConnectedApp.Authenticate().ConfigureAwait(false);
if (authResponse.AccessToken is not null)
{
var (channel, apiVersion) = Config.GetSaleForceAccountChannelDetails();
//DB call
var lastUsedReplayId = await _operatingParametersRepository.GetSaleForceLastUsedReplayId(channel).ConfigureAwait(false);
var endpointUrl = $"{authResponse.InstanceUrl}/cometd/{apiVersion}";
var readTimeOut = 120 * 1000;
var transportOptions = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase)
{
{ClientTransport.TIMEOUT_OPTION, readTimeOut},
{ClientTransport.MAX_NETWORK_DELAY_OPTION, readTimeOut}
};
var headers = new NameValueCollection
{{HttpRequestHeader.Authorization.ToString(), $"Bearer {authResponse.AccessToken}"}};
var transport = new LongPollingTransport(transportOptions, headers);
var transports = new ClientTransport[]
{
transport
};
// Create a CometD client instance
var bayeuxClient = new BayeuxClient(endpointUrl, transports);
bayeuxClient.Handshake();
bayeuxClient.WaitFor(100000, new List<BayeuxClient.State> {BayeuxClient.State.CONNECTED});
log.LogInformation("Handshake Status : {Status}", bayeuxClient.Handshook);
bayeuxClient.GetChannel(channel, lastUsedReplayId).Subscribe(new SalesForceMessageListener());
log.LogInformation("Connection Status : {Status}. Now, Waiting for the event", bayeuxClient.Connected);
}
// CosmosHelperRepository Code Called from above function
public async Task<long> GetSaleForceLastUsedReplayId(string channel)
{
try
{
var dbExistingRecordList = await _cosmosHelper.GetQuery(x =>
x.Pk == nameof(SalesForceReplayIdRunDetail)
&& x.ChannelName == channel);
var lastUsedReplayId = dbExistingRecordList.FirstOrDefault()?.LastUsedReplayId ?? -1;
return lastUsedReplayId;
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
// Implementation of Cosmos helper GetQuery method called in above repository function
public async Task<IList<T>> GetQuery(Expression<Func<T, bool>> predicate)
{
var container = GetContainer();
var query = container.GetItemLinqQueryable<T>()
.Where(predicate);
var list = new List<T>();
using var feedIterator = _feedIteratorProvider.GetFeedIterator(query);
while (feedIterator.HasMoreResults) list.AddRange(await feedIterator.ReadNextAsync());
return list;
}Just an FYI, I am able to get the replayId from cosmos db using the above code but the handshake is not happening.
Metadata
Metadata
Assignees
Labels
No labels