Skip to content

Commit aeade6b

Browse files
committed
Use a more reliable approach to managing Redis connection
1 parent 0f22d98 commit aeade6b

File tree

5 files changed

+35
-23
lines changed

5 files changed

+35
-23
lines changed

src/InEngine.Core/Queue/Broker.cs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,35 @@ public class Broker
1515
public string SecondaryWaitingQueueName { get { return QueueBaseName + ":SecondaryWaiting"; } }
1616
public string SecondaryProcessingQueueName { get { return QueueBaseName + ":SecondaryProcessing"; } }
1717

18+
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => {
19+
var queueSettings = InEngineSettings.Make().Queue;
20+
var redisConfig = ConfigurationOptions.Parse($"{queueSettings.RedisHost}:{queueSettings.RedisPort}");
21+
redisConfig.Password = string.IsNullOrWhiteSpace(queueSettings.RedisPassword) ?
22+
null :
23+
queueSettings.RedisPassword;
24+
redisConfig.AbortOnConnectFail = false;
25+
return ConnectionMultiplexer.Connect(redisConfig);
26+
});
27+
28+
public static ConnectionMultiplexer Connection { get { return lazyConnection.Value; } }
29+
1830
public ConnectionMultiplexer _connectionMultiplexer;
1931
public IDatabase Redis
2032
{
2133
get
2234
{
23-
if (_connectionMultiplexer == null || !_connectionMultiplexer.IsConnected)
24-
{
25-
var redisConfig = ConfigurationOptions.Parse($"{RedisHost}:{RedisPort}");
26-
redisConfig.Password = string.IsNullOrWhiteSpace(RedisPassword) ? null : RedisPassword;
27-
redisConfig.AbortOnConnectFail = false;
28-
_connectionMultiplexer = ConnectionMultiplexer.Connect(redisConfig);
29-
}
30-
return _connectionMultiplexer.GetDatabase(RedisDb);
35+
return Connection.GetDatabase(RedisDb);
3136
}
3237
}
33-
public string RedisHost { get; set; }
34-
public int RedisDb { get; set; }
35-
public int RedisPort { get; set; }
36-
public string RedisPassword { get; set; }
38+
public static string RedisHost { get; set; }
39+
public static int RedisDb { get; set; }
40+
public static int RedisPort { get; set; }
41+
public static string RedisPassword { get; set; }
3742

3843
public static Broker Make()
3944
{
40-
var queueSettings = InEngineSettings.Make().Queue;
41-
return new Broker()
42-
{
43-
QueueBaseName = queueSettings.QueueName,
44-
RedisHost = queueSettings.RedisHost,
45-
RedisPort = queueSettings.RedisPort,
46-
RedisDb = queueSettings.RedisDb,
47-
RedisPassword = queueSettings.RedisPassword,
45+
return new Broker() {
46+
QueueBaseName = InEngineSettings.Make().Queue.QueueName
4847
};
4948
}
5049

src/InEngine.Core/Queue/Commands/Consume.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using CommandLine;
3+
using Quartz;
34

45
namespace InEngine.Core.Queue.Commands
56
{
@@ -19,5 +20,10 @@ public override void Run()
1920
while (shouldConsume)
2021
shouldConsume = broker.Consume(UseSecondaryQueue) && ShouldConsumeAll;
2122
}
23+
24+
public override void Failed(Exception exception)
25+
{
26+
Write.Error(exception.Message);
27+
}
2228
}
2329
}

src/InEngine.Core/Queue/Commands/Publish.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Linq;
1+
using System;
2+
using System.Linq;
23
using CommandLine;
34
using InEngine.Core.Exceptions;
45

@@ -31,5 +32,10 @@ public override void Run()
3132

3233
Broker.Make().Publish(command, UseSecondaryQueue);
3334
}
35+
36+
public override void Failed(Exception exception)
37+
{
38+
Write.Error(exception.Message);
39+
}
3440
}
3541
}

src/InEngine.Core/Queue/Jobs.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ private void ScheduleQueueConsumerJobs(IScheduler scheduler, int consumers, bool
2525
var consume = new Consume() {
2626
ScheduleId = $"{(useSecondaryQueue ? "secondary" : "primary")}:{index.ToString()}"
2727
};
28-
var job = consume.MakeJobBuilder().RequestRecovery(true).Build();
28+
29+
var job = consume.MakeJobBuilder().Build();
2930
job.JobDataMap.Add("useSecondaryQueue", useSecondaryQueue);
3031

3132
var trigger = consume

src/InEngine/NLog.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
</targets>
1212

1313
<rules>
14-
<!-- <logger name="*" minlevel="Error" writeTo="c" />-->
14+
<!-- <logger name="*" minlevel="Debug" writeTo="c" />-->
1515
</rules>
1616
</nlog>

0 commit comments

Comments
 (0)