- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用启用了基于 session 的消息传递的 Azure 服务总线队列。为了从队列中使用,我注册了一个 IMessageSessionAsyncHandler
,然后在 OnMessageAsync
方法中处理消息。
我看到的这个问题是,如果我出于某种原因放弃一条消息,而不是立即再次收到消息,我会收到 session 中的下一条消息,并且只有在处理该消息后,我才会再次收到第一条消息(假设 session 中只有两条消息)。
举个例子,假设我有一个队列,上面有 2 条消息,两条消息都具有相同的 SessionId
。两条消息的序列号分别为1和2。正如预期的那样,我开始接收并获取序列 1 的消息。如果我随后使用 message.Abandon
放弃此消息(放弃的原因无关紧要),我会立即收到 session 中的下一条消息(序列号 2)。只有在处理(或放弃)第二条消息后,我才会再次收到第一条消息。
我看到的这种行为并不是我所期望的放弃消息的行为,并且与使用队列的其他方式不一致。我在以下场景中测试了相同的示例
IMessageSessionAsyncHandler
,而只是手动接受消息 session 。在这两种情况下,我都看到了预期的行为,因为当我放弃一条消息时,它总是保证是收到的下一条消息,除非超过最大传递计数并且它是死信的。
我的问题是这样的:我在使用 IMessageSessionAsyncHandler
时看到的行为是预期的,还是服务总线库中的错误?如果这不是一个错误,谁能给我解释一下为什么它的行为与其他接收方式不同?
最佳答案
当您在 Queueclient 上注册 session 处理程序时,预取会在内部打开,以改善接收器的延迟和吞吐量。不幸的是,对于 IMessageSessionAsyncHandler 场景,无法覆盖此行为。一种选择是当 session 中遇到需要放弃的消息时放弃 session 本身,这将确保消息按顺序传递。
关于c# - 在 Azure 服务总线上调用 Abandon 会将消息重新排队到队列的后面而不是前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233434/
我的 JavaScript 代码中有一道数学题。我需要将给定数量的玩家随机分成 2 队,这样每次 - 如果玩家想再次比赛 - 团队都会重新组成,并且在形成所有组合之前他们应该不同。 假设我有 4 个玩
我是一名优秀的程序员,十分优秀!