Я работал над темой / подпиской, поддерживающей сеанс.
Использовал следующий код для создания темы / подписки, включенной в сеанс,
var subscriptionName = "TestSubscription";
var topicName = "MyPartitionTopic";
var namespaceManager = NamespaceManager.CreateFromConnectionString(RuntimeConfig.ConnectionStrings.PrimaryAzureSb);
if (!namespaceManager.TopicExists(topicName))
{
var td = new TopicDescription(topicName);
td.EnablePartitioning = true;
namespaceManager.CreateTopic(td);
}
if (!namespaceManager.SubscriptionExists(topicName, subscriptionName))
{
var sd = new SubscriptionDescription(topicName, subscriptionName);
sd.RequiresSession = true;
namespaceManager.CreateSubscription(sd);
}
При получении сообщения в Receiver, фильтрация на основе sessionIdне происходитЯ использовал следующий код в Receiver,
void ReadMessage(string ConnectionStrings, string topicName, string subscriptionName, MessagingFactory messagingFactory, int batchcount)
{
int receivedMessages = 0;
SubscriptionClient subsClient =
messagingFactory.CreateSubscriptionClient(topicName, subscriptionName, ReceiveMode.ReceiveAndDelete);
string sessionId = "sessionId1";
subsClient.AcceptMessageSession(sessionId);
IEnumerable<BrokeredMessage> messages = subsClient.PeekBatch(batchcount);
}
Например: Я отправляю сообщение со следующим sessionId
Сценарий 1 .sessionId = sessionId1
Сценарий 2 .sessionId = sessionId2
Получатель:
Предположим, мне нужно получить сообщения, которые имеют только sessionId1, но, используя описанный выше метод, он просто возвращает верхний пакет записи (это может быть sessionId1 илиsessionId2)
- как получить точно совпадающее сообщение с таким же идентификатором sessionId?
- есть ли какая-либо другая функция, кроме sessionId, для достижения того же самого?
Заранее спасибо.