2

我正在尝试组装一个简单的 AppFabric 主题,从而使用 SessionId 发送和接收消息。代码不会中止,但 brokeredMessage 始终为空。这是代码:

// BTW, the topic already exists

var messagingFactory = MessagingFactory.Create(uri, credentials);
var topicClient = messagingFactory.CreateTopicClient(topicName);
var sender = topicClient.CreateSender();
var message = BrokeredMessage.CreateMessage("Top of the day!");
message.SessionId = "1";
sender.Send(message);

var subscription = topic.AddSubscription("1", new SubscriptionDescription { RequiresSession = true});
var mikeSubscriptionClient =  messagingFactory.CreateSubscriptionClient(subscription);
var receiver = mikeSubscriptionClient.AcceptSessionReceiver("1");
BrokeredMessage brokeredMessage;
receiver.TryReceive(TimeSpan.FromMinutes(1), out brokeredMessage); // brokeredMessage always null
4

1 回答 1

3

您的代码中有两个问题:

  1. 您在发送消息创建订阅。您需要在发送之前创建订阅,因为订阅告诉主题在某种意义上将消息复制到几个不同的“桶”。

  2. 您正在使用 TryReceive 但未检查其结果。如果接收到消息,则返回 true,否则返回 false(例如,发生超时)。

我正在编写我的示例应用程序,并将在今天将其发布在我们的博客上。我也会在这里发布链接。但在那之前,将订阅逻辑移到发送消息之前,然后将接收者移到它之后,您将开始看到结果。

更新:正如所承诺的,这里是我关于AppFabric 队列、主题、订阅入门 的博客文章的链接。

于 2011-06-30T07:54:44.483 回答