如何在不等待响应的情况下发布消息 RabbitMQ
How to publish message without waiting for response RabbitMQ
我是 RabbitMq 的新手,我只是按照 Internet 资源作为教程。在这里,我为 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;
}
}
当我调试代码 Consume 部分时工作正常,但在这里你可以看到,我没有从那里传递任何响应。请求 API。我遇到超时错误。
Timeout waiting for response, RequestId: a1670000-a53b-c025-bd0b-08d9d52ca58a.
其实我不需要Consumer 端的任何响应,只是想将请求传递给consumer。我想我需要在这里更改我的代码?
using (var request = _client.Create(orderRequest))
{
var response = await request.GetResponse<OrderReponse>();
datas = response.Message.orderName;
}
正确吗?但实际上我不知道该怎么做。请帮我解决这个问题。
如果您的订单命令不需要响应,请不要使用请求客户端。发布命令就可以了,不用管它了。
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;
}
当然,在您的原始代码中您实际上使用的是响应,所以...
我是 RabbitMq 的新手,我只是按照 Internet 资源作为教程。在这里,我为 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;
}
}
当我调试代码 Consume 部分时工作正常,但在这里你可以看到,我没有从那里传递任何响应。请求 API。我遇到超时错误。
Timeout waiting for response, RequestId: a1670000-a53b-c025-bd0b-08d9d52ca58a.
其实我不需要Consumer 端的任何响应,只是想将请求传递给consumer。我想我需要在这里更改我的代码?
using (var request = _client.Create(orderRequest))
{
var response = await request.GetResponse<OrderReponse>();
datas = response.Message.orderName;
}
正确吗?但实际上我不知道该怎么做。请帮我解决这个问题。
如果您的订单命令不需要响应,请不要使用请求客户端。发布命令就可以了,不用管它了。
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;
}
当然,在您的原始代码中您实际上使用的是响应,所以...