我正在设计一个服务织物无状态服务,每个实例都需要配置数据。我的初始想法是创建命名分区,并使用
PartitionInfo
获取命名键,使用共享的只读字典来加载每个实例的设置。问题是,现在从内部访问这个实例(从其他服务)需要一个分区键。由于所有使用这种方法的分区在内部提供相同的数据,连接到哪个分区并不重要(我希望它是随机的)。因此,这给了我很多解决这个问题的可能方式:
- 使用
ServiceProxy.Create
随机访问分区(如上所述)。
以下解决方案不涉及分区:
- 每个实例都有一个基于配置的设置。这篇文章没有太多帮助来提出一个解决方案。对于每个实例唯一的配置部分将是最理想的解决方案。
- 创建命名实例,并使用名称作为用户名(基本上将字符串附加到未分区的实例)。
- 通过索引获取实例,并使用该索引针对共享只读字典获取用户名。
- 以某种方式使用InitializationData(请参见此贴文)来获取用户名字符串(如果InitializationData可以对每个实例进行唯一设置)。
以上所有方法都可以解决我的问题。这些方法中是否有任何可行的方法?
编辑:我正在尝试创建一个服务的示例:
假设我们有一个名为stackoverflow问题服务(简称SOQS)。为了举例说明,假设每个用户一次只能连接到stackoverflow的websocket。SOQS内部方法(发布到我的服务fabric)有一个方法:GetQuestions()
。每个SOQS都需要使用唯一的用户名/密码连接到stackoverflow,并且当新问题通过websocket推送时,它们将添加到问题的内部列表中。 SOQS的GetQuestions()
方法(从我的服务fabric内部调用)将提供相同的问题列表。然后我可以通过添加更多实例(只要我有更多的用户名/密码)来进行负载平衡,并且在我的fabric内部分配负载。我可以调用ServiceProxy.Create<SOQS>()
来连接到随机实例以获取我的问题列表。