使用 RabbitMQ 和 SignalR 交换绑定在 MassTransit 中不起作用

Exchange binding not working in MassTransit with RabbitMQ and SignalR

我已经使用 masstransit rabbitMQ 和 signalR 实现了 .net 核心网络 api,我正在尝试让 signalR 背板工作。 我怀疑问题出在 masstransit 为我解决的交换绑定问题,但我无法弄清楚我做错了什么才会有这种行为。

我的目标是能够拥有另一个应用程序将调用的端点(目前我为此使用邮递员),它将向所有客户端(js 端)发布消息,但无论何时发布消息和它到达交易所没有任何反应,因为没有绑定。

在 rabbitMQ 管理工具中,它创建了一个没有绑定到另一个的交换器exchange/queue

我的创业公司:

        public void ConfigureServices(IServiceCollection services)
    {
        Utilities utilities = new Utilities(Configuration);

        RabbitMQIdentity rabbitMQIdentity = utilities.GetRabbitMQIdentity();
        var username = rabbitMQIdentity.UserName;
        var password = rabbitMQIdentity.Password;
        var hostName = rabbitMQIdentity.HostName;
        var portNumber = rabbitMQIdentity.Port;

        services.AddHttpClient();
        services.AddControllers();
        services.AddSignalR();

        services.AddMassTransit(config =>
        {
            config.AddSignalRHub<NotificationHub>();
            config.UsingRabbitMq((ctx, cfg) =>
            {
                cfg.Host($"amqp://{username}:{password}@{hostName}:{portNumber}");
                cfg.ConfigureEndpoints(ctx);
            });
        });
        services.AddMassTransitHostedService();

        services.AddSingleton<IHostEnvironment>(hostEnvironment);
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddSingleton<LogConfigurationUtility, WebLogConfigurationUtility>();
        services.AddCors(options =>
        {
            options.AddDefaultPolicy(builder =>
            {
                builder.SetIsOriginAllowed((x) => Configuration["CorsWhiteList"].Split(';').Any(x.Contains))
                       .WithMethods("GET", "POST")
                       .AllowAnyHeader()
                       .AllowCredentials();
            });
        });
    }

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseCors();

        app.UseMiddleware<RequestMiddleware>();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapHub<NotificationHub>("/notificationhub");
        });
    }

我的发布方式:

IReadOnlyList<IHubProtocol> protocols = new IHubProtocol[] { new JsonHubProtocol() };


        publishEndpoint.Publish<All<NotificationHub>>(new
        {
            Messages = protocols.ToProtocolDictionary("Notify", new object[] { "backend-process", "oiiiii" })
        });

我的客户端:

useEffect(() => {
    $(function() {
        const connection = new HubConnectionBuilder()
            .withUrl(hubUrl)
            .configureLogging(LogLevel.Trace)
            .build();
        // Create a function that the hub can call to broadcast messages.
        connection.on("Notify", (status) => {
            console.log("entrouuuuuu");
            setNotification(status);
        });
        // Start the connection.
        async function start() {
            try {
                await connection.start();
                connection.invoke("InitializeClient", orderId);
                console.log("SignalR Connected.");
            } catch (err) {
                setTimeout(start, 5000);
            }
        }

        start();
    });
}, []);

我遵循了 MassTransit 官方文档并试图找出示例示例与我的示例有何不同,但我似乎无法弄清楚(除了正确创建和绑定交换之外)。

https://masstransit-project.com/advanced/signalr/quickstart.html https://masstransit-project.com/advanced/signalr/sample.html

有人能帮帮我吗?

7.1.6 中存在一个错误has been fixed,将在 7.1.7 中发布。