从 Service Broker 队列获取多条消息

问题描述 投票:0回答:1

我有以下代码:

WAITFOR(
    RECEIVE TOP (100)                   
        message_type_name,
        CAST(message_body AS XML),                  
        conversation_handle
    FROM MyDemoQueue
    INTO @ReceiveTable
), TIMEOUT 10000;

但是即使队列中有 10 个条目,我也只收到一个条目。我看到了很多关于此的帖子,我知道这与对话组有关,我应该将消息放入一个对话组中。 Service Broker 一次仅接收一条消息

RECEIVE 语句返回的所有消息都属于同一个会话组

但是我找不到任何关于我应该如何实现这一点的代码示例。只有理论。我什至在官方文档中都找不到它。这应该在发送方还是接收方?如果有人以前做过此操作,请分享代码示例。

这是我发送消息的方式:

DECLARE @Handle UNIQUEIDENTIFIER;
DECLARE @MessageBody XML = '<test>hello</test>'

BEGIN DIALOG CONVERSATION @Handle 
    FROM SERVICE [SourceService]
    TO SERVICE 'TargetService'
    ON CONTRACT [TestContract]
    WITH ENCRYPTION = OFF;

SEND ON CONVERSATION @Handle
MESSAGE TYPE [TestMessage](@MessageBody);

我从不同的地方/批次做了好几次。另外,以下请求返回多条记录:

SELECT CONVERT(NVARCHAR(MAX), message_body) AS Message
FROM MyDemoQueue
sql sql-server sql-server-2008 service-broker
1个回答
0
投票

消息在发送时被分批放入对话组中。 如果发件人在不同的对话中发送每条消息,您必须一次接收一条消息。

对话可以是长期存在的,您可以跨多个 SEND 重用现有对话,当您这样做时,您可以在目标服务上按顺序交付和批量接收。

© www.soinside.com 2019 - 2024. All rights reserved.