Концентраторы не получают сообщений при использовании объединительной платы MassTransit SignalR - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь настроить поддержку объединительной платы MassTransit SignalR прямо сейчас. Я пытаюсь следовать этому руководству: https://masstransit-project.com/advanced/signalr/quickstart.html

Вот моя конфигурация MassTransit в моем Startup.cs (это вызывается из вызова ConfigureServices):

    private void ConfigureMassTransit([NotNull] IServiceCollection services)
    {
        services.AddSignalR().AddMassTransitBackplane();

        // creating the bus config
        services.AddMassTransit(x =>
        {
            // Add this for each Hub you have
            x.AddSignalRHubConsumers<ChatHub>();
            x.AddSignalRHubConsumers<NotificationHub>();

            x.AddBus(provider =>
            {
                var dnsResolutionService = provider.GetService<IDnsResolutionService>();
                var logger = provider.GetService<IMainLogger>();

                return MassTransitBusFactory.CreateBus(dnsResolutionService, logger, cfg =>
                {
                    cfg.AddSignalRHubEndpoints<ChatHub>(provider);
                    cfg.AddSignalRHubEndpoints<NotificationHub>(provider);
                });
            });
        });
    }

Сейчас я пытаюсь сделать это с помощью следующего концентратора:

public class NotificationHub : BaseHub, INotificationHub
{
    public NotificationHub([NotNull] ISessionService sessionService) 
        : base(sessionService)
    {
    }

    public async Task Test(string message)
    {
        await Clients.All.SendAsync("NewNotification", "bla");
    }
}

А вот мой код вызова:

    public Task RaiseSignalREvent()
    {
        var protocols = new IHubProtocol[] { new JsonHubProtocol() };

        return _eventBus.Publish<All<NotificationHub>>(new
        {
            Messages = protocols.ToProtocolDictionary("Test", new object []{"blub"}),
        });
    }

Код, очевидно, предназначен только для тестирования. по состоянию на сейчас. Когда я запускаю это и вызываю RaiseSignalREvent, я ожидал, что метод NotificationHub будет запущен, однако сейчас ничего не происходит.

Вот некоторые соображения, о которых я подумал, что может быть проблемой:

  1. Возможно, я неправильно понимаю, как собирается параметр "Messages" в publi sh.

  2. Конфигурация неверна. Я публикую это из службы, в которой не отображается весь код запуска.

  3. Я не уверен в том, как работает MassTransit, но на данный момент у меня есть два Автобусы в сервисе, в котором подробно находится Startup.cs. Есть шина, идущая от метода ConfigureMassTransit, и еще одна, созданная в сервисе, который я подключил к DI, который я обычно использую для работы с MassTransit. По сути, в этом сервисе есть 2 автобуса. Имеет ли это значение?

Может ли кто-нибудь помочь мне решить проблему, с которой я столкнулся?

1 Ответ

0 голосов
/ 17 апреля 2020

Во-первых, я не уверен, что вы подразумеваете под "У меня настроены две шины", но это звучит плохо. То, что вы вставили в свой метод ConfigureMassTransit, выглядит отлично, и это все, что вам нужно. Это может помочь, если вы поделитесь большим количеством кода для других мест, где вы регистрируете автобус, это может испортить ситуацию.

Я действительно не использовал SignalR, но очень часто люди скучают, когда в первый раз начиная с того, что вы должны запустить шину . Где-то в вашем коде вам нужно вызвать Start() для экземпляра IBusControl, или ничего не будет работать.

Проверьте https://masstransit-project.com/usage/configuration.html#web -приложение для некоторых примеров.

Извините, если вы уже делаете это!

...