我正在尝试使用实时通知。我尝试了所有示例,但是当我SendNotificationsAsync
时,我的客户没有收到它。
此外,AbpNotifications
表始终为空。
启动:
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalHost.DependencyResolver.UseRedis("redis", 6379, "", "ChecklistCache");
app.MapSignalR();
}
}
子:
public async Task Subscribe_NewAlert(int? tenantId, long userId)
{
await _notificationSubscriptionManager.SubscribeAsync(new UserIdentifier(tenantId, userId), "NewAlert");
}
Pub:
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()));
}
我检查了_realTimeNotifier
并且我的UserId
为空,但是IOnlineClientManager
自动设置了一个用户。我在哪里可以设置我的用户ID?
要使用ABP通知系统,我是否必须拥有ABP创建的所有公用表? (AbpUser
,AbpTenant
,AbpRoles
,权限等。)可以更改这些表的名称和列名称吗?如果我使用外部登录但没有所有这些信息,是否还需要这些表?
当我在执行时设置ID时,它可以工作。此外,显示通知后,它不会从数据库中删除,因此每次都会显示。我必须手动删除吗?
让我尝试阐明我的需求:
每个登录到我的网站的用户都将订阅"NewAlert"
。
我的API收到了"NewAlerts"
,因此API需要将该警报推送给所有订阅者。但是之后,我需要将实时通知发送给网站上的用户。我不知道如何通过Web API进行操作。
现在,在对网站实施身份验证后,它就可以正常工作了。但是我现在的问题是我的通知没有过期。每次发布通知时,我都会向客户显示AbpUserNotifications
表上的所有通知。
通知何时过期?我的理解是,当我发布通知时,将在表AbpUserNotifications
上创建一条记录,然后将其显示给客户端。但是,当我发布另一个通知时,它向我的客户显示了两个通知。我需要手动控制通知吗?
答案 0 :(得分:1)
我检查了_realTimeNotifier且UserId为null,但是IOnlineClientManager自动设置了一个用户,在哪里可以设置我的用户ID?
它是由身份验证(授权)系统从cookie或JWT令牌自动设置的。
要使用abp通知系统,我必须拥有abp框架创建的所有公用表吗? (abpUser,AbpTenant,AbpRoles,权限等)我也可以更改那些表名和列名吗?而且,如果我使用外部登录,则我没有所有信息,还需要那些表吗?
否,您不需要 all 表格。您可以实现自己的INotificationStore
和服务。
使用存储库实现存储的零模块,创建并使用公用表。
External login确实在您的应用程序的租户中创建了一个用户。大多数应用程序就是这样工作的。
当我在执行时间设置ID时,在显示通知后,通知也没有从数据库中删除,因此每次显示时,我都必须手动删除吗?
在对站点实施身份验证之后,现在可以正常工作了,但是现在的问题是我的通知没有过期,每次发布通知时,都会向我的客户端显示AbpUserNotifications表上的通知。
通知何时过期?我的理解是,当我发布通知时,会在表AbpUserNotifications上创建一条记录,并向客户端显示这些记录,但是当我发布另一条通知时,则会向客户端显示两次通知。我需要手动控制通知吗?
通知不会过期。您应该将其标记为已读(类似于堆栈溢出)或删除它。