使用C#中的Masstransit / RabbitMQ向特定通道/路由键发送消息

时间:2017-03-06 19:29:00

标签: c# rabbitmq masstransit

我一直在研究一个基于消息传递启动一些辅助角色的应用程序。

这是我希望应用程序工作的方式:

Client sends a request for work (RPC).

One of the worker roles accepts the work, generates a random id, and responds to the RPC with the new id.
The worker will post its debug logs on a log channel with the id.
The client will subscribe to this channel so users can see what's going on.

RPC工作正常,但我似乎无法弄清楚如何实现日志发送。

这是接受工作的代码(简化)

var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
    var host = sbc.Host(new Uri("rabbitmq://xxxxxx.nl"), h =>
    {
        h.Username("xxx");
        h.Password("xxxx");
    });


    sbc.ReceiveEndpoint(host, "post_work_item", e =>
    {
        e.Consumer<CreateWorkItemCommand>();
    });

    sbc.ReceiveEndpoint(host, "list_work_items", e =>
    {
        e.Consumer<ListWorkItemsCommand>();
    });
});

CreateWorkItemCommand将创建线程,完成工作等。现在,我将如何使用Masstransit实现日志发送?我想的是:

bus.Publish( 
     obj: WorkUpdate{ Message = "Hello world!" }, 
     channel: $"work/{work_id}"
)

客户会做一些事情:

bus.ReceiveFromEvented($"work/{rpc.work_id}").OnMessage += { more_psuedo_code() }

我似乎无法找到如何做到这一点。

任何人都可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

它看起来像 saga 投票率。 Current Turnout实现正在监视作业本身,我怀疑你是否真的可以订阅该消息流。它仍然没有真正完成

你可以使用传奇来解决这个问题。一些外部触发器(一个命令)将启动第一个saga,它将使用Request / Response启动进程,这将完成工作,并获得其相关ID(作业ID)。长作业可以使用相同的相关ID发布进度报告,并且saga将使用它们,执行它需要做的事情。

"work/{rpc.work_id}"将被相关性替换。