我是 RabbitMq 的新手,我只是按照互聯網資源作為教程。在這里,我為 OrderRequest 和 OrderConsume 創建了兩個單獨的 API。從訂單請求中,我打電話給這樣的東西。
IRequestClient<OrderRequest> _client;
public OrderRepo(IRequestClient<OrderRequest> requestClient)
{
_client = requestClient;
}
public async Task<string> GetOrderList(OrderRequest orderRequest)
{
string datas = "";
try
{
using (var request = _client.Create(orderRequest))
{
var response = await request.GetResponse<OrderReponse>();
datas = response.Message.orderName;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
return datas;
}
從 OrderConsume 中,我做了這樣的事情。
public class OrderConsumer : IConsumer<OrderRequest>
{
public Task Consume(ConsumeContext<OrderRequest> context)
{
OrderReponse request = new();
try
{
var data = context.Message.orderName " HelloWorld";
request.orderName = data;
}
catch (System.Exception ex)
{
System.Console.WriteLine(ex.Message);
throw;
}
return Task.CompletedTask;
}
}
當我除錯代碼消耗部分作業正常,但在這里你可以看到,我沒有從那里傳遞任何回應。來自請求 API。我收到超時錯誤。
Timeout waiting for response, RequestId: a1670000-a53b-c025-bd0b-08d9d52ca58a.
實際上我不需要消費者方面的任何回應,只是想將請求傳遞給消費者。我想我需要在這里更改我的代碼?
using (var request = _client.Create(orderRequest))
{
var response = await request.GetResponse<OrderReponse>();
datas = response.Message.orderName;
}
這是正確的嗎?但實際上我不知道該怎么做。請幫我解決這個問題。
uj5u.com熱心網友回復:
如果您的訂單命令不需要回應,請不要使用請求客戶端。只需發布命令并忘記它。
IPublishEndpoint _publishEndpoint;
public OrderRepo(IPublishEndpoint publishEndpoint)
{
_publishEndpoint = publishEndpoint;
}
public async Task<string> GetOrderList(OrderRequest orderRequest)
{
string datas = "";
try
{
await _publishEndpoint.Publish<OrderRequest>(orderRequest);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
return datas;
}
當然,在您的原始代碼中,您實際上是在使用回應,所以......
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408710.html
標籤:
上一篇:啟動新實體時如何獲取ID行程?
