【问题标题】:MassTransit Send onlyMassTransit 仅发送
【发布时间】:2015-02-05 09:23:40
【问题描述】:

我正在实施服务总线并查看 MassTransit。我的模式不是发布/订阅,而是发送者/接收者,接收者可以离线并稍后恢复在线。 现在我开始编写测试来验证 MassTransit 是否使用以下代码成功传递消息:

bus = ServiceBusFactory.New(sbc =>
{
    sbc.UseMsmq(
        cfg =>
        {
            cfg.Configurator.UseJsonSerializer();
            cfg.Configurator.ReceiveFrom("msmq://localhost/my_queue");
            cfg.VerifyMsmqConfiguration();
        });
});

然后我抓住公共汽车并发布这样的消息:

bus.Publish<TMessage>(message);

我可以从 MSMQ 中注意到,创建了两个队列并发送了消息,因为 Mass Transit 没有引发任何错误,但我在队列容器中找不到任何消息。

我做错了什么?

更新 阅读 Mass Transit 新闻组,我发现在发送者/接收者的场景中,接收者可以随时在线,消息可以使用以下代码发送:

bus.GetEndpoint(new Uri("msmq://localhost/my_queue")).Send<TMessage>(message);

在我的场景中,我再次编写发布者/订阅者,而是发送者/接收者。

【问题讨论】:

    标签: msmq masstransit


    【解决方案1】:

    首先,要发送,您可以使用简单的 EndpointCacheFactory 代替 ServiceBusFactory...

    var cache = EndpointCacheFactory.New(x => x.UseMsmq());
    

    从缓存中,您可以通过地址检索端点:

    var endpoint = cache.GetEndpoint("msmq://localhost/queue_name");
    

    然后,您可以使用端点发送消息:

    endpoint.Send(new MyMessage());
    

    要接收,您将创建一个上面指定的总线实例:

    var bus = ServiceBusFactory.New(x =>
    {
        x.UseMsmq();
        x.ReceiveFrom("msmq://localhost/queue_name");
    
        x.Subscribe(s => s.Handler<MyMessage>(x => {});
    });
    

    接收器进程完成后,在 IServiceBus 实例上调用 Dispose。一旦您的发布者关闭,请在 IEndpointCache 实例上调用 Dispose。

    不要释放单个端点 (IEndpoint) 实例,缓存会保留它们以供以后使用,直到释放为止。

    【讨论】:

    • 太棒了,非常感谢你 不幸的是,文档没有提到发送者/接收者的模式,但我很高兴它可以实现
    • 这不再存在。请参阅docs.masstransit-project.com/en/latest/configuration/…他们建议始终启动和停止公共汽车。
    • 是的,这是 MassTransit 历史的早期阶段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多