【发布时间】:2015-03-29 15:38:31
【问题描述】:
我刚开始使用 MassTransit,找不到适合初学者的任何合适的文档。 我确实在http://looselycoupledlabs.com/2014/06/masstransit-publish-subscribe-example/ 找到了一些示例代码,它显示了一个使用 RabbitMQ 的简单 MassTransit 发布/订阅示例
但对于我的公司,我需要使用 MSMQ。 所以我删除了 RabbitMQ 引用:
x.UseRabbitMq();
x.ReceiveFrom("rabbitmq://localhost/MtPubSubExample_" + queueName);
并将它们改为使用 MSMQ:
x.UseMsmq();
x.ReceiveFrom("msmq://localhost/MtPubSubExample_" + queueName);
我在启动订阅者和发布者时都没有收到错误,我可以在发布者处输入消息,但它们似乎没有到达订阅者,消费代码从未被调用。
配置:
namespace Configuration
{
public class BusInitializer
{
public static IServiceBus CreateBus(string queueName, Action<ServiceBusConfigurator> moreInitialization)
{
Log4NetLogger.Use();
var bus = ServiceBusFactory.New(x =>
{
x.UseMsmq();
x.ReceiveFrom("msmq://localhost/MtPubSubExample_" + queueName);
moreInitialization(x);
});
return bus;
}
}
}
出版商:
static void Main(string[] args)
{
var bus = BusInitializer.CreateBus("TestPublisher", x => { });
string text = "";
while (text != "quit")
{
Console.Write("Enter a message: ");
text = Console.ReadLine();
var message = new SomethingHappenedMessage() { What = text, When = DateTime.Now };
bus.Publish<SomethingHappened>(message, x => { x.SetDeliveryMode(MassTransit.DeliveryMode.Persistent); });
}
bus.Dispose();
}
订阅者:
static void Main(string[] args)
{
var bus = BusInitializer.CreateBus("TestSubscriber", x =>
{
x.Subscribe(subs =>
{
subs.Consumer<SomethingHappenedConsumer>().Permanent();
});
});
Console.ReadKey();
bus.Dispose();
}
未被调用的消费者代码:
class SomethingHappenedConsumer : Consumes<SomethingHappened>.Context
{
public void Consume(IConsumeContext<SomethingHappened> message)
{
Console.Write("TXT: " + message.Message.What);
Console.Write(" SENT: " + message.Message.When.ToString());
Console.Write(" PROCESSED: " + DateTime.Now.ToString());
Console.WriteLine(" (" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + ")");
}
}
我还以为我可以看到存储在 msmq 中的消息,但是私有队列是空的。
我现在头疼了 2 天,一定是遗漏了一些明显的东西;非常感谢任何帮助。
我的环境:Windows 8.1 Prof. 与 VS 2013 Prof.
【问题讨论】:
-
你能显示
moreInitialization(x);中的内容吗? -
您好,谢谢,仅适用于订阅者,在 x => 之后: var bus = BusInitializer.CreateBus("TestSubscriber", x => { x.Subscribe(subs => { subs.Consumer().Permanent(); });
标签: msmq masstransit