Подписка на тему AppFabric

Я пытаюсь собрать простую тему AppFabric, в которой сообщения отправляются и принимаются с использованием SessionId. Код не прерывается, но BrokeredMessage всегда имеет значение null. Вот код:

// 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

person Mike W    schedule 26.06.2011    source источник


Ответы (1)


У вас есть две проблемы в вашем коде:

  1. Вы создаете подписку ПОСЛЕ отправки сообщения. Вам необходимо создать подписку перед отправкой, потому что подписка указывает теме, в некотором смысле, скопировать сообщение в несколько разных «корзин».

  2. Вы используете TryReceive, но не проверяете его результат. Он возвращает true, если сообщение было получено, и false, если нет (например, истекло время ожидания).

Я пишу пример приложения и опубликую его сегодня в нашем блоге. Ссылку тоже здесь размещу. Но до тех пор переместите логику подписки до отправки сообщения, а получателя после него, и вы начнете видеть результаты.

Обновление. Как и было обещано, вот ссылка на мою запись в блоге на начало работы с очередями, темами и подписками AppFabric.

person Anže Vodovnik    schedule 30.06.2011