Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将所有已发布的消息从单独的应用程序记录到虚拟主机_C#_Rabbitmq_Masstransit - Fatal编程技术网

C# 如何将所有已发布的消息从单独的应用程序记录到虚拟主机

C# 如何将所有已发布的消息从单独的应用程序记录到虚拟主机,c#,rabbitmq,masstransit,C#,Rabbitmq,Masstransit,我有两个应用程序通过RabbitMQ虚拟主机相互通信,使用Masstransit作为抽象层 我正在尝试创建第三个应用程序,它将所有已发布的消息记录到此虚拟主机,同时不知道这些消息类型是什么 如果我事先知道这些信息,那就容易了;我会创造一些消费者。不幸的是,情况并非如此 我试过了,但只有当观察到的总线与发送消息的总线相同时,它们才似乎起作用。所以这在跨应用程序中不起作用 从中,我发现使用rabbit MQ绑定很容易做到这一点,但这似乎不受支持: 我也尝试过:,但这似乎也是一条死胡同,因为我想以自定

我有两个应用程序通过RabbitMQ虚拟主机相互通信,使用Masstransit作为抽象层

我正在尝试创建第三个应用程序,它将所有已发布的消息记录到此虚拟主机,同时不知道这些消息类型是什么

如果我事先知道这些信息,那就容易了;我会创造一些消费者。不幸的是,情况并非如此

我试过了,但只有当观察到的总线与发送消息的总线相同时,它们才似乎起作用。所以这在跨应用程序中不起作用

从中,我发现使用rabbit MQ绑定很容易做到这一点,但这似乎不受支持:

我也尝试过:,但这似乎也是一条死胡同,因为我想以自定义格式将数据记录到数据库中

我似乎错过了一件小事,但经过一整天的搜索,我没有找到想要的结果。你能把我带到正确的轨道上吗

对于总线配置,在所有3个应用程序中,我都使用直接配置模式:

 _bus = Bus.Factory.CreateUsingRabbitMq(cfg =>

如果您知道使用服务的队列名称,则可以使用新队列创建新服务,该队列将显式指定与其他服务队列的exchange名称的绑定。这将向新服务传递传递到该服务的每条消息的副本

然后服务可以使用JToken,JToken将把消息的JSON主体传递给使用者。通过这样做,每一条消息都可以被翻译/存储,不管你喜欢什么

class LogConsumer : IConsumer<JToken> {...}
然后,在接收端点中创建绑定:

cfg.ReceiveEndpoint(host, "log-queue", ep =>
{
    ep.Bind("service1-queue");
    ep.Bind("service2-queue");
    ep.Consumer<LogConsumer>();
}

这应该足以让你开始

啊,哇,我要试一试。我也不知道提前排队,但也许我能找到一种方法来查询他们。顺便说一句,我以前查看过Bind函数,但在这个重载中找不到它:cfg.ReceiveEndpointlogger,e=>。。。;。但是我现在看到ep的签名和类型在这个重载中是不同的。