Skip to content

Commit 5ded091

Browse files
author
pardahlman
authored
Merge pull request pardahlman#140 from ritasker/expose-mandatory-option-for-publish
(pardahlman#129) Expose Mandatory Option For Publish
2 parents fb56cb4 + 1739c4d commit 5ded091

File tree

7 files changed

+48
-7
lines changed

7 files changed

+48
-7
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ docs/*build*/
1313
#VS Code
1414
.vscode/**
1515

16+
#Rider
17+
.idea/**
18+
1619
# User-specific files (MonoDevelop/Xamarin Studio)
1720
*.userprefs
1821
**ncrunch**

sample/RawRabbit.Messages.Sample/project.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77

88
"frameworks": {
99
"netstandard1.5": {},
10-
"net451": {},
10+
"net451": {}
1111
}
1212
}

src/RawRabbit/Configuration/Publish/IPublishConfigurationBuilder.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using RabbitMQ.Client;
3+
using RabbitMQ.Client.Events;
34
using RawRabbit.Configuration.Exchange;
45

56
namespace RawRabbit.Configuration.Publish
@@ -9,5 +10,6 @@ public interface IPublishConfigurationBuilder
910
IPublishConfigurationBuilder WithExchange(Action<IExchangeConfigurationBuilder> exchange);
1011
IPublishConfigurationBuilder WithRoutingKey(string routingKey);
1112
IPublishConfigurationBuilder WithProperties(Action<IBasicProperties> properties);
13+
IPublishConfigurationBuilder WithMandatoryDelivery(EventHandler<BasicReturnEventArgs> basicReturn);
1214
}
1315
}

src/RawRabbit/Configuration/Publish/PublishConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using RabbitMQ.Client;
3+
using RabbitMQ.Client.Events;
34
using RawRabbit.Configuration.Exchange;
45

56
namespace RawRabbit.Configuration.Publish
@@ -9,5 +10,6 @@ public class PublishConfiguration
910
public ExchangeConfiguration Exchange { get; set; }
1011
public string RoutingKey { get; set; }
1112
public Action<IBasicProperties> PropertyModifier { get; set; }
13+
public EventHandler<BasicReturnEventArgs> BasicReturn { get; set; }
1214
}
1315
}

src/RawRabbit/Configuration/Publish/PublishConfigurationBuilder.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using RabbitMQ.Client;
3+
using RabbitMQ.Client.Events;
34
using RawRabbit.Configuration.Exchange;
45
using RawRabbit.Configuration.Request;
56

@@ -11,12 +12,14 @@ public class PublishConfigurationBuilder : IPublishConfigurationBuilder
1112
private string _routingKey;
1213
private Action<IBasicProperties> _properties;
1314
private const string _oneOrMoreWords = "#";
15+
private EventHandler<BasicReturnEventArgs> _basicReturn;
1416

1517
public PublishConfiguration Configuration => new PublishConfiguration
1618
{
1719
Exchange = _exchange.Configuration,
1820
RoutingKey = _routingKey,
19-
PropertyModifier = _properties ?? (b => {})
21+
PropertyModifier = _properties ?? (b => {}),
22+
BasicReturn = _basicReturn
2023
};
2124

2225
public PublishConfigurationBuilder(ExchangeConfiguration defaultExchange = null, string routingKey =null)
@@ -48,5 +51,11 @@ public IPublishConfigurationBuilder WithProperties(Action<IBasicProperties> prop
4851
_properties = properties;
4952
return this;
5053
}
54+
55+
public IPublishConfigurationBuilder WithMandatoryDelivery(EventHandler<BasicReturnEventArgs> basicReturn)
56+
{
57+
_basicReturn = basicReturn;
58+
return this;
59+
}
5160
}
5261
}

src/RawRabbit/Operations/Publisher.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Threading.Tasks;
3-
using RabbitMQ.Client;
43
using RawRabbit.Channel.Abstraction;
54
using RawRabbit.Common;
65
using RawRabbit.Configuration;
@@ -57,16 +56,23 @@ public Task PublishAsync<TMessage>(TMessage message, Guid globalMessageId, Publi
5756
{
5857
throw t.Exception;
5958
}
59+
60+
channelTask.Result.BasicReturn += config.BasicReturn;
61+
6062
lock (_publishLock)
6163
{
6264
var ackTask = _acknowledger.GetAckTask(channelTask.Result);
6365
channelTask.Result.BasicPublish(
6466
exchange: config.Exchange.ExchangeName,
6567
routingKey: _config.RouteWithGlobalId ? $"{config.RoutingKey}.{globalMessageId}" : config.RoutingKey,
6668
basicProperties: props,
67-
body: _serializer.Serialize(message)
68-
);
69-
return ackTask;
69+
body: _serializer.Serialize(message),
70+
mandatory: (config.BasicReturn != null)
71+
);
72+
return ackTask
73+
.ContinueWith(a => {
74+
channelTask.Result.BasicReturn -= config.BasicReturn;
75+
});
7076
}
7177
})
7278
.Unwrap();

test/RawRabbit.IntegrationTests/SimpleUse/PublishAndSubscribeTests.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
using RawRabbit.Configuration;
1111
using RawRabbit.Exceptions;
1212
using RawRabbit.IntegrationTests.TestMessages;
13-
using RawRabbit.vNext;
1413
using Xunit;
1514
using ExchangeType = RawRabbit.Configuration.Exchange.ExchangeType;
1615

@@ -389,6 +388,26 @@ public async Task Should_Be_Able_To_Publish_Message_After_Failed_Publish()
389388
Assert.True(true);
390389
}
391390
}
391+
392+
[Fact]
393+
public async Task Should_Run_Basic_Return_When_The_Manatory_Set_After_Failed_Publish()
394+
{
395+
/* Setup */
396+
using (var client = TestClientFactory.CreateNormal())
397+
{
398+
var tcs = new TaskCompletionSource<bool>();
399+
/* Test */
400+
await client.PublishAsync(new SimpleMessage(),
401+
configuration: cfg => cfg
402+
.WithMandatoryDelivery((obj, evt) =>
403+
{
404+
tcs.SetResult(true);
405+
}));
406+
407+
/* Assert */
408+
Assert.True(tcs.Task.Result);
409+
}
410+
}
392411
}
393412
}
394413

0 commit comments

Comments
 (0)