【问题标题】:Logic App - retrieve a batch of messages from a sessions-enabled Service Bus Queue逻辑应用 - 从启用会话的服务总线队列中检索一批消息
【发布时间】:2019-02-09 06:57:47
【问题描述】:

所以我想执行以下操作 - 每 N 秒从启用会话的队列(peek-lock)中获取 X 条消息,然后将它们一起(在单个请求中)发送到下一个处理点。以下是我到目前为止提出的选项 -

  1. “从队列中获取消息”操作

似乎需要我事先硬编码一个会话 ID(?),这不是那么方便。

  1. "Batch receiver" logic app

它仍在预览中

  1. Custom trigger

似乎可以,但需要额外的编码。

关于如何通过逻辑应用有效地实现这一目标有什么建议吗?

【问题讨论】:

    标签: azure azure-logic-apps azure-servicebus-queues


    【解决方案1】:

    您不需要专门的会话来批量检索特定数量的消息....只需阅读 10 条消息,然后执行您需要的任何处理。

    如果您还需要按顺序检索消息,那么可以,使用启用会话的队列,其中所有调用者都使用相同的 SessionId。

    请记住,SessinId 是任意应用程序值,因此您可以根据需要使用与队列名称相同的值。我不认为这是任何障碍,它就是这样运作的。

    您可以在任何需要的时间间隔使用循环触发器。

    会话主要用于对消息进行分组。 SessionID 可以是任何特定的任意值、HighPriority/LowPriority 或在运行时确定的值,例如 guid,如果您在特定相关消息之间进行关联。现在想来,FIFO的副作用似乎更支持关联场景。

    【讨论】:

    • 怎么样?如果我没有指定 SessionId,它会在逻辑应用尝试检索消息的步骤中失败。正如我之前所说,我在队列中启用了会话,这对我来说至关重要。
    • @KirylZ 这意味着使用非会话启用队列。你用 Sessions 做什么?您不需要 Sessions 来仅检索 n 条消息。
    • 我需要看到来保证消息的有序处理。
    • 我有点困惑所以请原谅我。我有数千个可能的 SessionId 值,我的消息是用这些值发出的。据我所知,除非我指定与特定 SessionId 匹配的精确值,否则“从队列中获取消息”将不起作用。这就是我在描述我的第一个选项时所说的“不太方便”的意思。我错了吗?
    • 啊,好的。为什么你有这么多 SessionId 值?也许有更好的方法来处理它。
    【解决方案2】:

    解决此问题的一种方法是在逻辑应用上设置最大并发。

    进入服务总线接收动作的设置:

    然后选择为10启用并发:

    【讨论】:

    • 是的,我也想到了并发控制。但我正在寻找一种将收到的消息组合在一起的方法,以便在单个请求中将它们移动到下一个处理点。我的不好我在问题中没有具体说明:(你认为有机会以某种方式合并消息吗?
    • 给我们更多信息,我们会尽力提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2021-11-14
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多