Skip to content

Commit

Permalink
Merge branch 'simpler-headers-interface'
Browse files Browse the repository at this point in the history
  • Loading branch information
mnichols committed Jul 5, 2010
2 parents 7a1acba + 47a6329 commit 8ff525d
Show file tree
Hide file tree
Showing 8 changed files with 116 additions and 74 deletions.
2 changes: 1 addition & 1 deletion Rhino.ServiceBus.Tests/Rhino.ServiceBus.Tests.csproj
Expand Up @@ -106,7 +106,7 @@
</Compile>
<Compile Include="BugWithLogTest.cs" />
<Compile Include="BusSubscriptionTests.cs" />
<Compile Include="RhinoQueues\CanAddHeadersToMessage.cs" />
<Compile Include="RhinoQueues\CustomizingMessageConstruction.cs" />
<Compile Include="CanRouteMessageToConsumerThroughContainer.cs" />
<Compile Include="CanSendMsgsFromOneWayBus.cs" />
<Compile Include="CanSendMsgsFromOneWayBusUsingRhinoQueues.cs" />
Expand Down
70 changes: 0 additions & 70 deletions Rhino.ServiceBus.Tests/RhinoQueues/CanAddHeadersToMessage.cs

This file was deleted.

@@ -0,0 +1,90 @@
using System;
using System.Collections.Specialized;
using Castle.Core;
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using Rhino.Queues;
using Rhino.ServiceBus.Impl;
using Rhino.ServiceBus.Internal;
using Rhino.ServiceBus.RhinoQueues;
using Xunit;

namespace Rhino.ServiceBus.Tests.RhinoQueues
{
public class CustomizingMessageConstruction
{

[Fact]
public void it_should_add_custom_header_to_headers_collection_using_builder()
{
using( var container = new WindsorContainer("RhinoQueues/RhinoQueues.config"))
{
container.Register(Component.For<IMessageBuilder<MessagePayload>>().ImplementedBy<CustomHeaderBuilder>());//before facility
container.AddFacility("rhino.esb", new RhinoServiceBusFacility());

var builder = container.Resolve<IMessageBuilder<MessagePayload>>();
builder.Initialize(new Endpoint { Uri = RhinoQueuesOneWayBus.NullEndpoint });
var msg = builder.BuildFromMessageBatch("somemsg");
Assert.NotNull(msg);
Assert.NotEqual(0, msg.Data.Length);
Assert.Equal("mikey", msg.Headers["user-id"]);
}

}

[Fact]
public void it_should_add_custom_header_to_headers_collection_using_interface()
{
using (var container = new WindsorContainer("RhinoQueues/RhinoQueues.config"))
{
container.AddFacility("rhino.esb", new RhinoServiceBusFacility());
container.Register(Component.For<ICustomizeMessageHeaders>().ImplementedBy<AppIdentityCustomizer>().LifeStyle.Is(LifestyleType.Transient));

var builder = container.Resolve<IMessageBuilder<MessagePayload>>();
builder.Initialize(new Endpoint { Uri = RhinoQueuesOneWayBus.NullEndpoint });
var msg = builder.BuildFromMessageBatch("somemsg");
Assert.NotNull(msg);
Assert.NotEqual(0, msg.Data.Length);
Assert.Equal("mikey", msg.Headers["user-id"]);
}

}

public class CustomHeaderBuilder : IMessageBuilder<MessagePayload>
{
private IMessageBuilder<MessagePayload> inner;

public CustomHeaderBuilder(IMessageBuilder<MessagePayload> inner)
{
this.inner = inner;
}

public MessagePayload BuildFromMessageBatch(params object[] msgs)
{
var payload = inner.BuildFromMessageBatch(msgs);
Contextualize(payload);
return payload;
}

public void Initialize(Endpoint source)
{
inner.Initialize(source);
}

private static void Contextualize(MessagePayload message)
{
message.Headers.Add("user-id","mikey");
}
}
public class AppIdentityCustomizer : ICustomizeMessageHeaders
{
public void Customize(NameValueCollection headers)
{
headers.Add("user-id","mikey");
}
}

}


}
9 changes: 9 additions & 0 deletions Rhino.ServiceBus/ICustomizeMessageHeaders.cs
@@ -0,0 +1,9 @@
using System.Collections.Specialized;

namespace Rhino.ServiceBus
{
public interface ICustomizeMessageHeaders
{
void Customize(NameValueCollection headers);
}
}
@@ -1,4 +1,4 @@
namespace Rhino.ServiceBus
namespace Rhino.ServiceBus.Internal
{
public interface IMessageBuilder<T>
{
Expand Down
1 change: 1 addition & 0 deletions Rhino.ServiceBus/Msmq/MsmqOnewayBus.cs
@@ -1,5 +1,6 @@
using System.Messaging;
using Rhino.ServiceBus.Impl;
using Rhino.ServiceBus.Internal;

namespace Rhino.ServiceBus.Msmq
{
Expand Down
3 changes: 2 additions & 1 deletion Rhino.ServiceBus/Rhino.ServiceBus.csproj
Expand Up @@ -97,6 +97,7 @@
<Compile Include="Hosting\DefaultHost.cs" />
<Compile Include="Hosting\RemoteAppDomainHost.cs" />
<Compile Include="Hosting\RemoteAppDomainLoadBalancerHost.cs" />
<Compile Include="ICustomizeMessageHeaders.cs" />
<Compile Include="Impl\EndpointRouter.cs" />
<Compile Include="Endpoint.cs" />
<Compile Include="Internal\IEndpointRouter.cs" />
Expand Down Expand Up @@ -217,7 +218,7 @@
<Compile Include="Messages\QueryReadyForWorkQueueUri.cs" />
<Compile Include="Messages\Reroute.cs" />
<Compile Include="Msmq\EndpointExtensions.cs" />
<Compile Include="IMessageBuilder.cs" />
<Compile Include="Internal\IMessageBuilder.cs" />
<Compile Include="Msmq\MsmqMessageBuilder.cs" />
<Compile Include="Transport\MessageHandlingCompletion.cs" />
<Compile Include="Msmq\OpenedQueue.cs" />
Expand Down
13 changes: 12 additions & 1 deletion Rhino.ServiceBus/RhinoQueues/RhinoQueuesMessageBuilder.cs
@@ -1,4 +1,5 @@
using System;
using System.Collections.Specialized;
using System.IO;
using Rhino.Queues;
using Rhino.ServiceBus.Internal;
Expand Down Expand Up @@ -40,9 +41,19 @@ public MessagePayload BuildFromMessageBatch(params object[] msgs)
{"source", endpoint.Uri.ToString()},
}
};

TryCustomizeHeaders(payload.Headers);
return payload;
}


private void TryCustomizeHeaders(NameValueCollection headers)
{
if (MessageHeaders == null)
return;
MessageHeaders.Customize(headers);
}

public ICustomizeMessageHeaders MessageHeaders { get; set; }
public void Initialize(Endpoint source)
{
endpoint = source;
Expand Down

0 comments on commit 8ff525d

Please sign in to comment.