Skip to content

Commit 3fad9c9

Browse files
authored
Requeue work on exception. (#6)
1 parent 4460408 commit 3fad9c9

1 file changed

Lines changed: 45 additions & 31 deletions

File tree

RabbitExpress/QueueClient.cs

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -71,39 +71,53 @@ public class QueueClient<TSerializer>
7171

7272
private void HandleMessage(Func<byte[], WorkerResult> handler, BasicDeliverEventArgs @event)
7373
{
74-
WorkerResult res = handler(@event.Body);
75-
switch (res)
74+
try
75+
{
76+
WorkerResult res = handler(@event.Body);
77+
switch (res)
78+
{
79+
case WorkerResult.Success:
80+
Acknowledge(@event.DeliveryTag);
81+
break;
82+
case WorkerResult.Requeue:
83+
Reject(@event.DeliveryTag);
84+
break;
85+
case WorkerResult.Failed:
86+
Reject(@event.DeliveryTag, false);
87+
break;
88+
default:
89+
throw new ArgumentOutOfRangeException();
90+
}
91+
}
92+
catch
7693
{
77-
case WorkerResult.Success:
78-
Acknowledge(@event.DeliveryTag);
79-
break;
80-
case WorkerResult.Requeue:
81-
Reject(@event.DeliveryTag);
82-
break;
83-
case WorkerResult.Failed:
84-
Reject(@event.DeliveryTag, false);
85-
break;
86-
default:
87-
throw new ArgumentOutOfRangeException();
94+
Reject(@event.DeliveryTag);
8895
}
8996
}
9097

9198
private void HandleMessage(Func<BasicDeliverEventArgs, WorkerResult> handler, BasicDeliverEventArgs @event)
9299
{
93-
WorkerResult res = handler(@event);
94-
switch (res)
100+
try
101+
{
102+
WorkerResult res = handler(@event);
103+
switch (res)
104+
{
105+
case WorkerResult.Success:
106+
Acknowledge(@event.DeliveryTag);
107+
break;
108+
case WorkerResult.Requeue:
109+
Reject(@event.DeliveryTag);
110+
break;
111+
case WorkerResult.Failed:
112+
Reject(@event.DeliveryTag, false);
113+
break;
114+
default:
115+
throw new ArgumentOutOfRangeException();
116+
}
117+
}
118+
catch
95119
{
96-
case WorkerResult.Success:
97-
Acknowledge(@event.DeliveryTag);
98-
break;
99-
case WorkerResult.Requeue:
100-
Reject(@event.DeliveryTag);
101-
break;
102-
case WorkerResult.Failed:
103-
Reject(@event.DeliveryTag, false);
104-
break;
105-
default:
106-
throw new ArgumentOutOfRangeException();
120+
Reject(@event.DeliveryTag);
107121
}
108122
}
109123

@@ -166,9 +180,9 @@ private string GetQueueIdentifier(string ret, string name, string[] args)
166180

167181
private void RegisterQueues<TInterface>()
168182
{
169-
var iType = typeof(TInterface);
170-
var methods = iType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod);
171-
foreach (var info in methods)
183+
Type iType = typeof(TInterface);
184+
MethodInfo[] methods = iType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod);
185+
foreach (MethodInfo info in methods)
172186
{
173187
var h = new
174188
{
@@ -178,7 +192,7 @@ private void RegisterQueues<TInterface>()
178192
};
179193
var queueName = GetQueueIdentifier(h.ret, h.name, h.args);
180194

181-
var res = _model.QueueDeclare(queueName, true, false);
195+
QueueDeclareOk res = _model.QueueDeclare(queueName, true, false);
182196
IDictionary<string, object> spec = new Dictionary<string, object>
183197
{
184198
{"x-match", "all"},
@@ -393,7 +407,7 @@ public async Task<object> Intercept(Invocation invocation)
393407
object result = null;
394408
var handler = new Func<byte[], WorkerResult>(d =>
395409
{
396-
var type = invocation.Method.ReturnType;
410+
Type type = invocation.Method.ReturnType;
397411
if (type.IsTaskT())
398412
{
399413
type = invocation.Method.ReturnType.GenericTypeArguments[0];

0 commit comments

Comments
 (0)