Skip to content

Instantly share code, notes, and snippets.

@craigbeck
Created May 25, 2012 16:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save craigbeck/2789073 to your computer and use it in GitHub Desktop.
Save craigbeck/2789073 to your computer and use it in GitHub Desktop.
MassTransit and Autofac integration spike
using System;
using Autofac;
using NUnit.Framework;
using MassTransit;
namespace ServiceBusSpike.Sandbox
{
public class ServiceMessage
{
public int Id { get; set; }
public DateTime TimeStamp { get; private set; }
public ServiceMessage()
{
TimeStamp = DateTime.Now;
}
}
public class ServiceTextMessage : ServiceMessage
{
public string Text { get; set; }
}
public class LogStart : Consumes<ServiceMessage>.All
{
public void Consume(ServiceMessage message)
{
Console.WriteLine("{0} {1}: {2}", message.Id, this, message);
}
}
public class FooConsumer : Consumes<ServiceMessage>.All
{
public void Consume(ServiceMessage message)
{
Console.WriteLine("{0} {1}: {2}", message.Id, this, message);
}
}
[TestFixture]
public class SandboxTests
{
protected IContainer Container { get; set; }
[SetUp]
public void BeforeEachTest()
{
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(GetType().Assembly).As<IConsumer>();
builder.Register(container => ServiceBusFactory.New(svc =>
{
svc.UseRabbitMq();
svc.UseRabbitMqRouting();
svc.ReceiveFrom("rabbitmq://localhost/container_test");
svc.Subscribe(subs => subs.LoadFrom(container.Resolve<ILifetimeScope>()));
})
).As<IServiceBus>().SingleInstance();
Container = builder.Build();
}
[Test]
public void ConsumerIsRegistered()
{
Assert.IsTrue(Container.IsRegistered<IConsumer>());
}
[Test]
public void ServiceMessageConsumerIsRegistered()
{
Assert.IsTrue(Container.IsRegistered<Consumes<ServiceMessage>.All>());
}
[Test]
public void CanResolveConsumer()
{
var consumer = Container.Resolve<IConsumer>();
Assert.IsInstanceOf<IConsumer>(consumer);
}
[Test]
public void CanResolveServiceStartMessageConsumer()
{
var consumer = Container.Resolve<Consumes<ServiceMessage>.All>();
Assert.IsInstanceOf<Consumes<ServiceMessage>.All>(consumer);
}
[Test]
public void StartListening()
{
var bus = Container.Resolve<IServiceBus>();
for (int i = 0; i < 10; i++)
{
bus.Publish(new ServiceMessage { Id = i });
Console.Write(".");
}
Console.WriteLine();
Console.WriteLine("FINISHED SENDING");
System.Threading.Thread.Sleep(2000);
}
}
}
@craigbeck
Copy link
Author

This version doesn't work and the messages end up in the error queue. This happens when there is an error instantiating the consumer. In this case it appears that registering IConsumer gives MT enough info to hang itself by - i.e. it registers and wires up with the bus infrastructure consumers it then can't create when it has a message to be handled.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment