模块: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、: 分片的和 :load_balanced 之一。如果 :connect设置为 :load_balanced,则即使服务器未连接到负载均衡器,驱动程序也会将其视为负载均衡器。

  • :load_balanced ( true | false )

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

  • :replica_set 符号

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

返回:

由于:

  • 2.0.0



89
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
130
131
132
133
# File 'lib/ Mongo/ 集群/ 拓扑结构.rb', line 89

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