Hello
Using ServiceStack 6.11
Redis Message Queues on AWS
It is working very well with a lot of messages going through in multiple queues (thousands a day)
I am keeping the message small and the queues are staying small
But from time to time (maybe once a week), it is suddenly starting to drop messages in the .DLQ queues
And the reading threads are getting stuck
Not many of them
When I restart the application, it works again after a little while (there are not many message in the .DLQ and I think other messages are getting dropped silently)
I am getting something similar to this in all the error queues (I redacted the bearer token):
mq:CallNop.dlq :
{"id":"e56dfd67c22247d499f55ec5b3ee1fb9","createdDate":"\/Date(1699306321239)\/","priority":0,"retryAttempts":2,"options":1,"error":{"errorCode":"NullReferenceException","message":"Object reference not set to an instance of an object.","errors":[]},"body":{"__type":"Tiptopweb.MojoPortal.Shared.QueueModel.CallNop, Tiptopweb.MojoPortal.Shared.QueueModel","bearerToken":"xxxxxxxxxxxxxxxxxxxxxxxx","listParams":[{"task":"GetNopLastOrders","paramId":0,"paramStr":""}]}}
I am protecting the access via ApiKeyAuthProvider
I have a special user with the "bearerToken":"xxxxxxxxxxxxxxxxxxxxxxxx"
(redacted)
Would you have an idea what it could be?
Cannot reproduce or debug, as it is not happening often and running in production
Not sure how I could handle this.
Redis server is at 25% memory, all patches done. We have a replicate (2 nodes). It is also not happening at the busiest time.
I have a feeling the Redis Server itself getting stuck. When I republish it takes a bit of time for the queues to work again (not like if there the reading threads are corrupted and it starts again as soon as I republish)
Are the Redis queues reliable from experience?
Using them as I am also use Redis to Cache content, so it is convenient.
Do you think I should try maybe to move to a different queue system like the Amazon SQS (I am hosting on EC2 machines)
public class CallNop : IReturn<CallNopResponse>, IHasBearerToken
{
public string BearerToken { get; set; }
public List<CallNopParam> ListParams { get; set; }
}
public class CallNopParam
{
public string Task { get; set; }
public int ParamId { get; set; }
public string ParamStr { get; set; }
}
public class CallNopResponse
{
public ResponseStatus ResponseStatus { get; set; }
}
public partial class MojoPortalBackendService : Service
{
[Authenticate(ApiKeyAuthProvider.Name)]
[RequiredRole(Constants.AdminQueue)]
public object Any(CallNop listMessages)
{
...
}
}