我有以下代码:
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
消息在发送时被分批放入对话组中。 如果发件人在不同的对话中发送每条消息,您必须一次接收一条消息。
对话可以是长期存在的,您可以跨多个 SEND 重用现有对话,当您这样做时,您可以在目标服务上按顺序交付和批量接收。