模块:Mongo::Cluster::Topology

扩展方式:
拓扑结构
包含在:
拓扑结构
定义于:
lib/ Mongo/ 集群/
拓扑结构、lib/ Mongo/


集群/
拓扑结构、lib/ Mongo/ 集群/ 拓扑结构/base.rb、lib/ Mongo/ 集群/ 拓扑结构/single.rb、lib/
Mongo/ 集群/拓扑结构/分片的.rb,lib/ Mongo/ 集群/ 拓扑结构/unknown.rb,lib/
Mongo/ 集群/ 拓扑结构/load_balanced.rb,lib/
Mongo/ 集群/ 拓扑结构/no_replica_set_options.rb,lib/ Mongo/ 集群/
拓扑结构/ replica_set_no_primary.rb、lib/ Mongo/ 集群/ 拓扑结构/replica_set_with_primary.rb

Overview

定义获取服务器的行为。

拓扑结构与其集群相关联,示例,ReplicaSet拓扑结构包含副本集名称。 因此,一个拓扑结构对象不能与多个集群对象一起使用。

同时,尽管拓扑对象的构造函数可能建议,但拓扑对象对集群中的特定服务器一无所知。 这尤其意味着,如果应用程序想要跟踪副本集中的服务器更改,则拓扑更改事件需要应用程序自行维护集群引用。

由于:

  • 2.0.0

在命名空间下定义

模块: NoReplicaSetOptions 类: BaseLoadBalancedReplicaSetNoPrimaryReplicaSetWithPrimaryShardedSingleUnknown

常量摘要折叠

OPTIONS =

此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。

用于选择服务器的各种拓扑结构。

由于:

  • 2.0.0

{
  直接: Single,
  load_balanced: LoadBalanced,
  replica_set: ReplicaSetNoPrimary,
  分片的: 分片,
}.冻结

实例方法摘要折叠

实例方法详细信息

#initial (集群, 监控, options) ⇒ ReplicaSet , ...

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

获取所提供选项的初始集群拓扑。

例子:

获取初始集群拓扑。

Topology.initial(topology: :replica_set)

参数:

  • 集群 (集群)

    集群。

  • 监控 (监控)

    监控。

  • 选项 (哈希)

    集群选项。

选项哈希 ( options ):

  • :direct_connection ( true | false )

    是否绕过拓扑发现,直接连接到指定的种子。 必须提供一个种子。

  • :connect 符号

    已弃用 - 使用 :direct_connection 选项代替此选项。 要使用的连接方法。 这会强制集群按照指定方式运行,而不是自动发现。 :direct、:replica_set、:sharded、:load_balanced 之一。 如果 :connect 设置为 :load_balanced,则即使服务器未连接到负载均衡器,驱动程序也会将其视为负载均衡器。

  • :load_balanced ( true | false )

    是否期望连接到负载均衡器。

  • :replica_set 符号

    要连接到的副本集的名称。 不在该副本集中的服务器将被忽略。

返回:

由于:

  • 2.0.0



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/ Mongo/ 集群/ 拓扑结构.rb', line 90

def 初始(集群, 监控, 选项)
  连接 = 选项[:connect]&。to_sym
  cls = if 选项[:direct_connection]
    if 连接 && 连接 != :direct
      提高 ArgumentError, "冲突的拓扑结构选项:direct_connection=true 和 connect= #{ connect } "
    end
    if 选项[:load_balanced]
      提高 ArgumentError, "冲突的拓扑选项:direct_connection=true 和 load_balanced=true "
    end
    Single
  elsif 选项[:direct_connection] == false && 连接 && 连接 == :direct
    提高 ArgumentError, "冲突的拓扑选项:direct_connection=false 和 connect= #{ connect } "
  elsif 连接 && 连接 != :load_balanced
    if 选项[:load_balanced]
      提高 ArgumentError, " Conflicting 拓扑结构 options: connect= #{ options[:connect].inspect} and load_balanced =true "
    end
    选项.获取(选项[:connect].to_sym)
  elsif 选项.键?(:replica_set) || 选项.键?(:replica_set_name)
    if 选项[:load_balanced]
      提高 ArgumentError, "冲突的拓扑结构选项:replica_set/replica_set_name 和 load_balanced=true "
    end
    ReplicaSetNoPrimary
  elsif 选项[:load_balanced] || 连接 == :load_balanced
    LoadBalanced
  else
    未知
  end
  # 此处的选项是客户端/集群/服务器选项。
  # 特别是,副本集名称键与
  #拓扑结构。
  # 如果给出了 replica_set_name(可能由驱动程序内部指定),
  # 使用该密钥。
  # 否则(例如 从客户端传递的选项),
  # 将 replica_set 移动到 replica_set_name。
  if (cls <= ReplicaSetNoPrimary || cls == Single) && !选项[:replica_set_name]
    选项 = 选项.dup
    选项[:replica_set_name] = 选项.删除(:replica_set)
  end
  cls.new(选项, 监控, 集群)
end