如何在不等待响应的情况下发布消息 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;
}

当然,在您的原始代码中您实际上使用的是响应,所以...