问题标签 [azure-servicebus-queues]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 使用 SignalR 和 Azure 的实时通知系统
我正在尝试在我们的 ASP.NET MVC 网站中制作一个类似 facebook 的通知系统
在一个场景中,通知系统是这样工作的
- User1 通过单击 MVC 站点中的关注按钮关注 User2
- MVC 站点通过 API 请求发送
NotificationItem
一个NotificationManager
。
POST api/通知/发送
NotificationManager
然后处理此 notificationItem 然后将其保存到 Azure 表存储
保存项目后,客户端(User2)然后通过
NotificationHub
(SignalR hub)订阅notificationEventNotificationHub
然后通知 User2 以及处理后的通知数据。
我试图在这张图片上说明当前流程和架构
现在,困扰我的是第 5 步中的这行代码
它背后的作用是查询notificationItem
来自存储,将其处理为用户可读的通知(例如“User1 现在关注你”),然后更新notificationItem
后面的 (IsSent, DateSent) 的状态。
不用说,它以某种方式执行“繁重”操作。并且每次有新的 NotificationItem 发送或广播给每个订阅者时都会实时触发。
显然,我在这里谈论性能和可扩展性问题。所以我研究了一些可以解决这个问题的可能的技术或方法。似乎使用 Azure 服务总线背板方法是一个可行的选择
一个特定的段落解释了这种方法的一些限制
服务器广播(例如股票行情):背板在这种情况下工作得很好,因为服务器控制发送消息的速率。
客户端到客户端(例如,聊天):在这种情况下,如果消息数量随客户端数量增加,那么背板可能会成为瓶颈;也就是说,如果消息的速率随着更多客户端的加入而按比例增长
高频实时(例如实时游戏):不建议在这种情况下使用背板。
现在 - 这个让我思考,就像我的情况一样。服务器广播和客户端到客户端(以及介于两者之间的东西)适用于我想要实现的目标。
这些是我目前正在处理的通知事件场景(及其接受标准)
- 通知用户有新的关注者(实时或近实时通知)
- 聊天消息(实时,将查看聊天者当前是否正在输入)
- 发布状态(实时或接近实时)
- 在帖子中评论(实时,将查看聊天者当前是否正在输入)
经过数小时的思考 - 我现在(由于我缺乏经验)的想法是一个类似这样的通知系统
您会注意到,这与我们当前的设计非常不同。当前设计仅使用 1 个 Azure webrole。
其中,有一个webrole
用于网站,webrole 用于中心,以及一个工人角色来处理通知数据。因此 - 将“负载”分配给 3 个不同的角色,并为scaling-out.
现在 - 这是我现在脑海中的问题。
- 这种架构是否适合我想要实现的目标?
- 由于通知在队列中 - 我们可以实现“实时”通知更新吗?
- 由于我们将 SignalR 集线器分离到另一个 Web 角色中 - 我们将如何处理授权?
- 服务总线队列还是 Azure 队列?
任何帮助将不胜感激。
注意:我打算只使用 Azure 技术,因为这个项目实际上是面向 Azure 和 .NET 的。
c# - 未从 Azure 服务总线队列收到消息
我在我们的项目中添加了一个新的工人角色来处理拨出电话。它绘制调用以取消服务总线队列。
我制作了一个小控制台应用程序来将事情扔到队列中,以便我可以检查以确保它正常工作。不幸的是,似乎我的应用程序放入队列的任何内容都会立即(或几乎立即?)放入死信队列。我看了一下队列的属性,我可以看到
worker 角色试图从队列中取出东西,但它所提取的只是空值。
队列设置与我们正在工作的其他队列相同。我放入队列的对象几乎由所有原语组成,标记为 [MessageContract] 和 [Serializable]。所有成员都标记为 [MessageHeader]。
我还尝试使用我们用于其他队列的对象,只是为了看看会发生什么,并且那个对象也会立即出现死信。
我不明白。随着队列大小的增加,该对象显然正在进入队列。但这只是死信,我不知道除了超时之外还有什么可能导致这种情况发生。
更多信息:使用服务总线资源管理器查看,似乎消息被死信,因为 MaxDeliveryCountExceeded。这似乎意味着如果接收消息失败超过 10 次,它会将其转移到死信队列。所以部分解决了,但我在工作角色代码中放置了一个调试点,并且那里从来没有发生任何错误。我的
总是返回 null 所以它甚至没有时间做错事。我想在实际的 Receive() 调用中出了点问题?
c# - Azure 服务总线 BrokeredMessage 的序列化
我有一个无状态的 RESTful 服务,它将 Peek & Lock 关闭 Azure 服务总线队列。收到消息后,它会将消息转发给将要处理它的客户端。客户端可能需要比锁定超时更长的时间来处理消息。
客户端无法直接与队列交谈,我宁愿不向服务添加任何状态。相反,我想向客户端发送足够的信息,以便他们可以将其发回,并且服务可以代表他们更新锁定。
那么,如何序列化 BrokeredMessage 以便在反序列化后更新锁定呢?
或者,是否有某种方法可以获得 BrokeredMessage 的令牌,以便我可以仅使用该令牌(而不是整个消息)来更新锁定或从队列中删除消息?
azure - Azure 服务总线队列一次只接收 450 条消息
Azure 在收到的批次项目方面是否有某种限制?尽管被要求更多,但以下代码仅检索 450 条消息:
我尝试增加次数,但每次都没有任何影响--450。这似乎是批量接收的 Azure SDK 文档中推荐的方式。
注意:队列中有数万个项目。
c# - Azure 服务总线队列消息处理
我有两个连接到 Azure 队列的消费者(不同的应用程序)。我可以ReceiveAndDelete
或PeekLock
消息,在消费期间,我可以complete()
或abandon()
消息。参考:http: //msdn.microsoft.com/en-us/library/azure/hh851750.aspx。
我确定我想使用PeekLock
然后abandon()
是消息,因为我希望它们在两个应用程序中都被接收。我想我将队列上的消息生命周期设置为 10 秒作为删除机制。
但是,由于消息似乎在 10 秒后被删除,因此在这 10 秒内它们会一遍又一遍地在两个应用程序中发布。我应该创建一些自定义重复检测还是我使用了错误的方法?
azure - azure service bus - 是否允许修改队列中消息的属性
我正在设计一个基于队列的系统,用于将某些消息的发布者与其消费者分离。我有一个额外的要求 - 当发布者推送一条新消息并且如果类似类型的早期消息已经在队列中并且尚未处理(即由消费者选择),那么旧消息必须在新消息之前被删除消息被推入队列;这是为了节省处理我们知道已经过时的消息的成本。我正在探索用于实现这样一个队列的技术。Azure 服务总线是一种选择吗?它是否允许修改队列中特定消息的属性?另外,关于什么是实现这样一个队列的最佳技术有什么建议吗?
c# - MessageReceiver.ReceiveBatch() 未按预期工作
我正在尝试使用 MessageReceiver 中的 ReceiveBatch 方法从 ServiceBus 批量接收消息:
我使用 Service Bus Explorer 检查了我的队列是否包含 20 条消息。
此代码仅返回消息结构中的一条消息。我缺少一些财产吗?
c# - 使用 Azure 服务总线队列和 BrokeredMessage.ScheduledEnqueueTimeUtc 续订订阅
我有一个订阅模型,想要执行与续订相关的逻辑,例如开具新发票、发送电子邮件等。例如,用户将在今天购买订阅,而续订是一年后的时间。我最近一直在使用 Azure Queue,并认为它会申请这样的更新。
BrokeredMessage.ScheduledEnqueueTimeUtc
是否可以通过使用( http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.scheduledenqueuetimeutc.aspx )推送消息来使用 Azure 队列来处理此类长期计划消息?
我将它用于短期,例如在 1 分钟内发送通知,效果很好。
这样,我什至可以让多个进程监听队列,并确保只有一个进程会执行更新逻辑。这将解决许多与锁定相关的问题,因为这是通过租赁和相关功能内置在 Azure 队列中的一种。
c# - Azure 服务总线队列 - 当消息在队列中时,QueueClient.Receive() 返回 null BrokeredMessage
我在 Azure 服务总线队列中有无法接收的消息。而且我没有得到任何关于问题所在的指标。我认为这与消息大小有关。您可以从下面的代码中看到我正在使用 OpenFileDialog。我正在选择 jpeg 图像并将它们发送到队列中。现在,当我发送小于约 50KB 的小图像时,接收过程会很好地显示它们,但超过 100KB 的较大图像只会留在队列中。MSDN 说消息大小限制为 256KB,所以我不确定这里发生了什么。
我有两节课。一个是 SendToQueue,另一个是 RecvFromQueue。这是代码。
azureservicebus - 从 Storm 群集访问 Azure 服务总线时出错
我们正在尝试使用自定义构建的 spout java 代码通过 Apache Storm 集群从 Azure 服务总线 (ASB) 读取消息。当风暴拓扑提交以集群模式运行时,我们面临以下问题:
- 未注册的服务或属性:com.microsoft.windowsazure.services.servicebus.ServiceBusContract 类 com.sun.jersey.api.client.Client
- 无法添加 Azure 服务总线连接器
- 服务设置失败。
- 异步循环死了!
当以本地模式(无集群)提交相同的拓扑时,相同的代码可以正常工作并且能够接收来自 ASB 的消息。
从 java 环境访问 ASB 并能够解决此问题时,是否有人遇到过类似的问题?