我正在尝试重写我的服务器/客户端(基于TCP的连接)程序,以使其使用Azure服务器总线队列,但我无法弄清楚如何组织"来自/到不同客户端的队列和消息,以阻止它们彼此读取。
让我先从这个场景开始: 1 - 客户端连接到队列并放入让我们说消息(用户名/密码)中的-log进入LOG-IN队列。
2 - 服务器读取消息发现其中一个客户端正在尝试登录,它会读取消息,检查提供的详细信息并将结果放入LOG-IN-RESULT队列。
3 - 客户假设从LOG-IN-RESULT读取,但如何保证它正在读取其结果而不是其他客户端?
很抱歉缺少代码,问题纯粹是关于我猜的结构/原理。
由于
答案 0 :(得分:1)
首先,我不能说你的基于队列的系统适合登录场景。但在您的情况下,我认为基于Azure可能有三种选择。
<强> 1。使用订阅查询(不推荐)
Azure Service Bus具有主题和订阅功能。 您可以创建查询以接收完全相同的Guid。在这种情况下我没有测试性能,但它的功能如下。
namespaceManager.CreateSubscription("LoginTopic", "LOG-IN-RESULT", new SqlFilter("RequestGuid = '3872-ACD3-38FB-2311-2002'"));
有关订阅的详细信息,请阅读以下文档:link
<强> 2。使用Azure存储表
Azure Table提供查询功能,因此您可以立即使用它,如下面的Odata查询。
https://myaccount.table.core.windows.net/LoginTable(PartitionKey='LOG-IN-RESULT',RowKey='3872ACD338FB23112002')
有关Azure Table的详细信息,请参阅此link。
第3。使用Azure Sql或其他rdbms。
我想你已经知道了。只需插入并选择。
答案 1 :(得分:0)
您可以为尝试登录的用户实现唯一标识符(假设它是包含Guid标识符的cookie,在用户请求页面时分配),我们将其命名为UserId。然后,您可以将标识符保存为消息ID的一部分。然后,客户端应用程序将只尝试只读取消息,其中包含指定的UserId。