我一直在研究启用会话的主题/订阅。
使用以下代码创建启用了会话的主题/订阅
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)
谢谢。
答案 0 :(得分:1)
您使用的方法
subscriptionClient.AcceptMessageSession()
将返回服务名称空间中所有启用会话的订阅中具有可用会话的消息。
使用
subscriptionClient.OnAcceptSessionReceiver()
接收带有特定“ sessionId”的消息。