首页 > 解决方案 > 使用使用 localhost 初始化的请求/响应时如何修复 MassTransit.EndpointNotFoundException?

问题描述

我们正在使用带有请求/响应模式的 masstransit,如下所述:http: //masstransit-project.com/MassTransit/usage/request-response.html

由于某种原因,当使用 localhost 初始化总线时,我使用 context.RespondAsync 方法在响应端收到 MassTransit.EndpointNotFoundException 。

当使用实际 IP 初始化总线时,它运行良好,没有任何异常。

我们也将总线与使用 localhost 初始化的其他公共交通模式一起使用,没有任何问题。

我们尝试在请求端同时使用 Request 和 GetResponse 模式,认为问题来源可能存在,但没有成功。

以下是响应端的消费者代码,它在 RespondAsync 上生成异常:

public override async Task Consume(ConsumeContext<IImageRequest> context)
{
    var msg = context.Message;

    try
    {    
        var image = GetImage(msg.Id);

        await context.RespondAsync<IImageResult>(new
        {
            msg.Id,
            AImage = image
        });
    }
    catch (Exception e)
    {
        Logger.Instance.Error($"{e}");
    }
}

以下是请求方:

Task.Run(async () =>
{   
    var reqResClient =
        BusControl.GetBusControl.CreateRequestClient<IImageRequest, IImageResult>("requestimage");
    var req = new ImageRequest(msg.Id);
    var response = await reqResClient.Request(req); 
}).Wait();

总线初始化代码:

_bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    cfg.Durable = true;

    _host = cfg.Host(HostName, port, VirtualHost, h =>
    {
        h.Username(UserName);
        h.Password(Password);   
    });

    cfg.ReceiveEndpoint(host, subscriber.QueueName, ep =>
    {
        ep.Durable = !subscriber.AutoDelete;
        ep.AutoDelete = subscriber.AutoDelete;

        ep.Instance(subscriber.Consumer);

        if (subscriber.PrefetchCount.HasValue)
            ep.PrefetchCount = subscriber.PrefetchCount.Value;

        if (subscriber.ConcurrencyLimit.HasValue)
            ep.UseConcurrencyLimit(subscriber.ConcurrencyLimit.Value);
    });

    cfg.Message<T>(x =>
    {
        x.SetEntityName(entityName);
    });
});
public void Start()
{
    if (_state == BusState.NotInitialized)
        throw new InvalidOperationException("Cannot start bus. Bus is not initialized");

    _bus?.Start();

    _state = BusState.Started;
}

我想知道是否有解决方案?或者这是一个已知问题?

谢谢,

标签: c#masstransit

解决方案


推荐阅读