问题标签 [azure-servicebus-subscriptions]
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.
session - 如何注册以接收只有特定会话 ID 的服务总线会话消息?
- 我正在使用 .net core 3.1 和 Microsoft.Azure.ServiceBus(版本 5.1.3)。
- 我有一个服务总线主题,其中一个订阅只能处理会话消息。
一个主题客户端可以发送 3 条带有会话 ID(比如 ABCD)的消息,然后发送另外 4 条带有会话 ID(XYZ)的消息。编写订阅客户端来接收具有相关会话 ID 的所有 7 条消息非常容易。但是,我只希望能够接收会话 id 为 XYZ 的消息(并且不关心会话 id 为 ABCD 的消息,甚至不想接收它们)。
以下示例代码用于接收具有所有会话 ID 的所有消息,按预期工作:
问题:
- 如何更改上面的代码,以便我只接收会话 ID 为 XYZ 的消息(而不接收会话 ID 为 ABCD 的消息)?
- 如果上面的代码不可能,有没有其他方法可以实现我想要的(使用相同的库)?如果有,请举例说明。
c# - Azure 服务总线(主题)订阅会话未按请求关闭
[编辑:我重新制定并简化了我原来的问题]
我在会话中使用 Azure 服务总线主题/订阅,并且在关闭会话时遇到问题。
对于背景信息,我的应用程序从我大部分时间保持活动状态的主题订阅会话(FIFO 要求)接收数据。只有偶尔我们需要暂时“暂停”数据流。
当请求此数据流“暂停”时,我们退出订阅会话并等待被要求再次打开会话。
问题 :
如前所述,我在退出会话时遇到问题,因为调用session.CloseAsync()
似乎不起作用。即使我明确要求会话停止,消息也会不断出现。
- 不能直接关闭主题会话是正常行为吗?如果是这样,为什么要公开电话
session.CloseAsync()
? - 我真的可以独立于订阅连接关闭会话吗?
ps1:我的代码基于微软在 github.com 上提供的官方示例。尽管此示例基于队列会话而不是主题会话,但在我看来,行为应该相同是合乎逻辑的。
ps2:我在Microsoft.Azure.ServiceBus存储库上深入研究了可能是什么原因,我想知道属性的底层是否缺少变量初始化MessageSession.OwnsConnection
..
azure-stream-analytics - 如何在输出消息到服务总线的流分析中设置 PartitionKey 属性?
我有以下设置:
- 活动中心
- 具有单个订阅的服务总线主题,该订阅接受来自该主题的所有消息(对于我的 POC)
- 以上服务总线订阅是在启用会话的情况下设置的
- 将事件从事件中心(输入)移动到服务总线主题(输出)的流分析 (SA) 作业。这是我的 SA 查询:
- 上述作业还设置了服务总线的分区键。根据https://docs.microsoft.com/en-us/azure/stream-analytics/service-bus-topics-output#custom-metadata-上的文档,在 [sb-output] 的系统属性中使用以下 json输出属性:
我做了什么:
- 将事件发送到没有分区键的事件中心。这是成功的。
- SA 成功地将事件从事件中心移动到服务总线。
- 服务总线订阅成功收到如下消息:
- 可以看出,属性 Partner 位于消息的末尾。
- 但是,Service Bus Explorer 工具显示 PartitionKey 属性尚未设置为“abcd”,而是设置为其他一些随机字符串。
故障排除:
为了确保我可以使用特定的 PartitionKey 键向服务总线主题发送消息,我编写了一个示例代码,通过显式设置消息的会话 id 属性将消息提交给服务总线主题。服务总线资源管理器向我展示了 SessionId 和 PartitionKey 属性都设置为正确的值。
在 ASA 输出配置中,尝试设置以下系统属性 json。都没有奏效。
{ "SessionId" : "Partner" }
{ "PartitionKey" : "Partner", "SessionId" : "Partner" }
- 在 ASA 输出配置中,尝试设置属性列 (to
Partner
) 以及系统属性列 (to{ "PartitionKey" : "Partner" }
)。那没有用。
问题:
- 我在绕过 PartitionKey 值从我的自定义字段传播到服务总线消息的 ASA 输出配置中做错了什么?
- 还有一个原因是系统属性列不显示我保存后输入的 json 文本吗?
azure - Azure服务总线从订阅的死信队列中删除特定消息
我正在使用下面的代码尝试从订阅的死信队列中删除特定消息。我正在使用 PeekBySequenceNumberAsync 来获取特定消息。问题是该方法显然没有设置锁定令牌。我收到以下错误:“提供的锁无效。锁已过期,或者消息已从队列中删除,或者由不同的接收器实例接收。”
关于如何从订阅死信队列中删除特定消息的任何想法?我正在使用 .net 核心 Microsoft.Azure.ServiceBus 库。
c# - 如何从 Azure 服务总线主题订阅一次接收 N 条消息
我有一个 Azure 服务总线主题订阅,其中消息不断增加。
下面的代码基本上是一次接收一条消息并处理它并将相关结果存储到数据库中。
我尝试设置 MaxConcurrentCalls to 10
,但由于数据库工作设计,它耗尽了我的数据库连接池。
所以我想一次从订阅中获取 10 条消息(接收一批 N 条消息)并希望使用一个数据库调用进行处理。
我没有看到任何批处理 api 选项,这可能吗?
我正在使用Microsoft.Azure.ServiceBus
nuget 版本4.1.1
。
c# - “SubscriptionClient”不包含“PeekBatch”和 ReceiveBatch 的定义
我有一个netstandard2.1
应用程序,我正在使用 nuget package "Microsoft.Azure.ServiceBus" Version="4.1.1"
。
我正在创建一个 azure 服务总线SubscriptionClient
并尝试使用PeekBatch
and ReceiveBatch
,但我遇到了错误,这里缺少什么?
“SubscriptionClient”不包含“PeekBatch”的定义,并且找不到接受“SubscriptionClient”类型的第一个参数的可访问扩展方法“PeekBatch”
“SubscriptionClient”不包含“ReceiveBatch”的定义,并且找不到接受“SubscriptionClient”类型的第一个参数的可访问扩展方法“PeekBatch”
c# - 如何避免消息进入“deadletter”队列 azure 服务总线
我正在使用来自服务总线主题/订阅的消息。将ProcessMessage
消息添加到一个容量有界队列(一次不超过 200 条消息)。一旦完成了一条消息处理,我就完成了CompleteAsync
,只有在ProcessMessage
给时true
。
现在,如果发生一些异常,例如队列已满且未准备好接收任何新消息,那么我将生成异常并ProcessMessage
给出false
. 在这种情况下_subscriptionClient.CompleteAsync
没有调用,但消息将deadletter
排队。
如何防止这种情况?消息不应该进入deadletter
队列,它应该等待某个时间来处理?
注意 - 我AbandonAsync
根据评论建议添加了逻辑,但消息仍然会死信并且不会重新出现在主题订阅中。请建议!
最大交付计数 = 5,已尝试 5 次,然后移至死信
azure - Azure 服务总线中消息单元可以支持的最大吞吐量和消息速率是多少
我正在尝试为 azure service bus 高级层进行成本计算。我找不到以下简单问题的答案
- 单个消息单元可以支持的最大消息速率
- 单个消息单元可以支持的最大吞吐量(数据大小/秒)
azure - 如何使用带有死信原因和错误描述的 Rest Api 向 Azure 服务总线订阅死信发送消息?
我找不到如何使用 rest api 向 Azure 服务总线订阅死信发送消息的示例。看来端点的后缀应该是 /Subscriptions//$deadletterqueue。但是,我找不到如何传递 deadletterReason 和 deadLetterErrorDescription 的示例。是否像将这些值作为消息头传递一样简单?