Система оповещения в реальном времени ABP UserId является нулевой - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь использовать уведомления в режиме реального времени.Я перепробовал все примеры, но когда я SendNotificationsAsync, мой клиент не получает его.

Кроме того, таблица AbpNotifications всегда пуста.

Запуск:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        GlobalHost.DependencyResolver.UseRedis("redis", 6379, "", "ChecklistCache");
        app.MapSignalR();
    }
}

Sub:

public async Task Subscribe_NewAlert(int? tenantId, long userId)
{
    await _notificationSubscriptionManager.SubscribeAsync(new UserIdentifier(tenantId, userId), "NewAlert");
}

Паб:

public async Task Publish_NewAlert(string alert)
{
    var msg = new MessageNotificationData($"New alert created! {alert}");
    await _notiticationPublisher.PublishAsync("NewAlert", msg, severity: NotificationSeverity.Info);
}

Моя работа:

[Abp.Domain.Uow.UnitOfWork]
public override void Execute(UserIdentifier args)
{
    var notifications = _userNotificationManager.GetUserNotifications(args);
    Abp.Threading.AsyncHelper.RunSync(() => _realTimeNotifier.SendNotificationsAsync(notifications.ToArray()));
}
  1. Я проверил _realTimeNotifier и мой UserId равно нулю, но IOnlineClientManager устанавливает пользователя автоматически.Где я могу установить свой идентификатор пользователя?

  2. Чтобы использовать систему уведомлений ABP, я должен иметь все общие таблицы, которые создает ABP?(AbpUser, AbpTenant, AbpRoles, разрешения и т. Д.) Можно ли изменить имена этих таблиц и имена столбцов?Если я использую внешний логин и у меня нет всей этой информации, мне все еще нужны эти таблицы?

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

Позвольте мне попытаться уточнить, что мне нужно:

  • Каждый пользователь, который входит на мой сайт, подпишется на "NewAlert".

  • Мой API получает "NewAlerts", поэтому API необходимо будет отправить это оповещение всем подписчикам.Но после этого мне нужно отправлять уведомления в режиме реального времени пользователям на сайте.Что я не знаю, как сделать из моего веб-API.

Теперь он работает, после того как я ввел аутентификацию на своем сайте.Но моя проблема сейчас в том, что мои уведомления не имеют срока действия.Каждый раз, когда я публикую уведомление, я показываю своему клиенту все уведомления, которые находятся в таблице AbpUserNotifications.

Когда истекает срок действия уведомлений?Насколько я понимаю, когда я публикую уведомление, в таблице AbpUserNotifications создается запись, а затем я показываю ее клиенту.Но когда я публикую другое уведомление, оно показывает два уведомления моему клиенту.Нужно ли контролировать свои уведомления вручную?

1 Ответ

0 голосов
/ 11 декабря 2018

Уведомления в режиме реального времени

Я проверил _realTimeNotifier и мой UserId имеет значение null, но IOnlineClientManager устанавливает пользователя автоматически, где я могу установить свой идентификатор пользователя?

Он автоматически устанавливается из файла cookie или токена JWT системой аутентификации (авторизации).

Постоянные уведомления

для использования системы уведомлений abp У меня должны быть все общие таблицы, которыефреймворк abp создает?(abpUser, AbpTenant, AbpRoles, разрешения и т. д.) Я тоже могу изменить имена этих таблиц и столбцов?И если я использую внешний логин, у меня нет всей этой информации, все еще нужны эти таблицы?

Нет, вам не нужны все таблицы.Вы можете реализовать свои собственные INotificationStore и сервисы.

Модуль Zero, который реализует хранилище с помощью репозиториев, создает и использует общие таблицы.

Внешний логин создаетпользователь в арендаторе в вашем приложении.Так работает большинство приложений.

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

Теперь работает, после того как я установил аутентификацию на своем сайте, но моя проблема сейчас в том, что мои уведомления не устаревают, каждый раз, когда я публикую уведомления, показывается моим Клиентам I уведомления, которые находятся в таблице AbpUserNotifications.

Когда срок действия уведомлений истекает?Насколько я понимаю, когда я публикую уведомление, в Таблице AbpUserNotifications создается запись, которую я показываю клиенту, но при публикации другого уведомления отображается ДВА уведомления для моего клиента.Мне нужно контролировать свои уведомления вручную?

Срок действия уведомлений не истек.Вы должны пометить его как прочитанный (аналогично переполнению стека) или удалить его.

...