【问题标题】:Cleint not receive response: “No handlers could be found for message type”客户端未收到响应:“找不到消息类型的处理程序”
【发布时间】:2021-02-12 20:27:55
【问题描述】:

我有一个需要通过 nservicebus 发送请求的 .net 核心服务。 我用 DI 解析 IMessageSession 并发送如下请求:

var response = await messageSession.Request<CreateDeviceResponse>(request);

在日志中,我看到另一个服务收到了这个请求并发送了回复:

我从未收到回复的问题。 客户端收到这样的错误:

我知道如果客户端和服务器端点名称相同,可能会出现这样的问题,但我检查并使用了不同的名称

asp net mvc 4.7.2

【问题讨论】:

  • 确保 1) 你有一个实现 IHandleMessages&lt;CreateDeviceReponse&gt; 的类 2) NSB 将 CreateDeviceReponse 识别为命令 3) 尝试使用 IEndpointInstance 而不是 IMessageSession

标签: nservicebus


【解决方案1】:

首先,消息并没有丢失,而是在错误队列中。

我建议按照教程了解 NServiceBus 的工作原理以及您需要在哪里安装什么。 tutorials start here 是 entire learning path starts here,它解释的范围更广,包括一般概念和架构。

就像@tchelidze 提到的那样,您需要实现IHandleMessages&lt;CreateDeviceReponse&gt; 接口,就像here in the tutorial 中概述的那样。此外,您将其发送到哪个端点也没有关系。 EndpointA 可以发送给EndpointB 和EndpointA。你不能做的是有两个同名的端点。这就像有两台名为MachineA 的同名计算机,然后从MachineB 尝试访问MachineA 上的文件。 MachineB 应该连接两者中的哪一个?还有一种叫做“竞争消费者模式”的东西,但这是后来的问题;-)

如果您需要更多帮助,请随时通过https://discuss.particular.net/ 询问更多 NServiceBus 社区成员所在的位置,以及 NServiceBus 本身的工程师。

【讨论】:

  • 端点名称正确。相同的配置适用于 .net 核心,但不适用于 asp net mvc 4.7.2
【解决方案2】:

由于某种原因,它有助于在任务中发出请求:

Task.Run(async () => await messageSession.Request<CreateDeviceResponse>(request))

我仍然不明白问题是什么,但它只适用于这种实现。 在 .net core web API 中,即使没有 Task.Run 也能正常工作,所以我相信这与我在 asp net mvc 4.7.2 中提出这个请求有关

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 2014-02-26
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    相关资源
    最近更新 更多