问题描述
我有一个 .net 核心服务,需要通过 nservicebus 发送请求。 我使用 DI 解析 IMessageSession 并发送如下请求:
var response = await messageSession.Request<CreateDeviceResponse>(request);
我知道如果客户端和服务器端点名称相同,可能会发生这样的问题,但我检查过并使用了不同的名称
asp 网络 mvc 4.7.2
解决方法
首先,消息并没有丢失,而是在错误队列中。
我建议按照教程来了解 NServiceBus 是如何工作的,以及你需要在什么地方安装什么。 tutorials start here 而是 entire learning path starts here,它解释了更广泛的内容,包括一般概念和架构。
就像@tchelidze 提到的,你需要有一个 IHandleMessages<CreateDeviceReponse>
接口的实现,就像 here in the tutorial 概述的那样。此外,您将其发送到哪个端点并不重要。 EndpointA
可以发送到 EndpointB
和 EndpointA
。你不能做的是有两个同名的端点。这就像让两台名为 MachineA
的计算机同名,然后从 MachineB
尝试访问 MachineA
上的文件。 MachineB
应该连接到两者中的哪一个?还有一种叫做“竞争消费者模式”的东西,但这是后来的问题;-)
如果您需要更多帮助,请随时在 https://discuss.particular.net/ 询问更多 NServiceBus 社区成员所在的位置,以及 NServiceBus 本身的工程师。
,出于某种原因,它有助于在任务中发出请求:
Task.Run(async () => await messageSession.Request<CreateDeviceResponse>(request))
我仍然不明白是什么问题,但它只适用于这样的实现。 在 .net core web API 中,即使没有 Task.Run 也能工作,所以我相信这与我在 asp net mvc 4.7.2 中提出这个请求有关