public async Task Should_Publish_Message_On_Error_Exchange_If_Subscribe_Throws_Exception() { /* Setup */ var conventions = new NamingConventions(); var client = BusClientFactory.CreateDefault(null, ioc => ioc.AddSingleton(c => conventions)); var recieveTcs = new TaskCompletionSource<HandlerExceptionMessage>(); MessageContext firstRecieved = null; MessageContext secondRecieved = null; client.SubscribeAsync<HandlerExceptionMessage>((message, context) => { secondRecieved = context; recieveTcs.TrySetResult(message); return Task.FromResult(true); }, c => c .WithExchange(e => e.WithName(conventions.ErrorExchangeNamingConvention())) .WithQueue(q => q.WithArgument(QueueArgument.MessageTtl, (int)TimeSpan.FromSeconds(1).TotalMilliseconds)) .WithRoutingKey("#")); client.SubscribeAsync<BasicMessage>((message, context) => { firstRecieved = context; throw new Exception("Oh oh!"); }); var originalMsg = new BasicMessage { Prop = "Hello, world" }; /* Test */ client.PublishAsync(originalMsg); await recieveTcs.Task; /* Assert */ Assert.Equal(((BasicMessage)recieveTcs.Task.Result.Message).Prop, originalMsg.Prop); Assert.NotNull(firstRecieved); Assert.NotNull(secondRecieved); Assert.Equal(firstRecieved.GlobalRequestId, secondRecieved.GlobalRequestId); }
public async Task Should_Be_Able_To_Subscibe_To_Pure_Json_Message() { var conventions = new NamingConventions(); using ( var client = TestClientFactory.CreateNormal(ioc => ioc.AddSingleton<INamingConventions>(c => conventions))) { /* Setup */ var tcs = new TaskCompletionSource<BasicMessage>(); var subscription = client.SubscribeAsync<BasicMessage>((message, context) => { tcs.TrySetResult(message); return Task.FromResult(true); }); var uniqueValue = Guid.NewGuid().ToString(); var jsonMsg = JsonConvert.SerializeObject(new BasicMessage {Prop = uniqueValue}); /* Test */ TestChannel.BasicPublish( conventions.ExchangeNamingConvention(typeof(BasicMessage)), conventions.QueueNamingConvention(typeof(BasicMessage)), true, null, Encoding.UTF8.GetBytes(jsonMsg)); await tcs.Task; /* Assert */ Assert.Equal(uniqueValue, tcs.Task.Result.Prop); } }