C# 如何将所有已发布的消息从单独的应用程序记录到虚拟主机
我有两个应用程序通过RabbitMQ虚拟主机相互通信,使用Masstransit作为抽象层 我正在尝试创建第三个应用程序,它将所有已发布的消息记录到此虚拟主机,同时不知道这些消息类型是什么 如果我事先知道这些信息,那就容易了;我会创造一些消费者。不幸的是,情况并非如此 我试过了,但只有当观察到的总线与发送消息的总线相同时,它们才似乎起作用。所以这在跨应用程序中不起作用 从中,我发现使用rabbit MQ绑定很容易做到这一点,但这似乎不受支持: 我也尝试过:,但这似乎也是一条死胡同,因为我想以自定义格式将数据记录到数据库中 我似乎错过了一件小事,但经过一整天的搜索,我没有找到想要的结果。你能把我带到正确的轨道上吗 对于总线配置,在所有3个应用程序中,我都使用直接配置模式:C# 如何将所有已发布的消息从单独的应用程序记录到虚拟主机,c#,rabbitmq,masstransit,C#,Rabbitmq,Masstransit,我有两个应用程序通过RabbitMQ虚拟主机相互通信,使用Masstransit作为抽象层 我正在尝试创建第三个应用程序,它将所有已发布的消息记录到此虚拟主机,同时不知道这些消息类型是什么 如果我事先知道这些信息,那就容易了;我会创造一些消费者。不幸的是,情况并非如此 我试过了,但只有当观察到的总线与发送消息的总线相同时,它们才似乎起作用。所以这在跨应用程序中不起作用 从中,我发现使用rabbit MQ绑定很容易做到这一点,但这似乎不受支持: 我也尝试过:,但这似乎也是一条死胡同,因为我想以自定
_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的签名和类型在这个重载中是不同的。