类:Mongo::Srv::Resolver Private

继承:
对象
  • 对象
显示全部
包括:
Loggable
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/srv/resolver.rb

Overview

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

封装根据驱动程序的要求查询 SRV 记录的必要行为。

常量摘要折叠

RECORD_PREFIX =

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

返回 RECORD_PREFIX 在查询 SRV 记录之前添加到每个主机名的前缀。

返回:

  • ( string )

    RECORD_PREFIX 在查询 SRV 记录之前添加到每个主机名的前缀。

' _mongodb._tcp. '.冻结

Loggable中包含的常量

Loggable::PREFIX

实例属性摘要折叠

实例方法摘要折叠

Loggable中包含的方法

#log_debug#log_error#log_ Fatal#log_info#log_warn#logger

构造函数详情

#initialize (**opts) ⇒解析程序

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

创建新的解析程序。

参数:

  • opts (哈希)

    一组可自定义的选项

选项哈希 ( **opts ):

  • :timeout 浮点

    用于每个 DNS记录解析的超时时间(以秒为单位)。

  • :raise_on_invalid 布尔值

    在找到具有不匹配域的记录或未找到记录时是否引发异常。 默认为 true。

  • :resolv_options 哈希

    仅供内部驱动程序使用。 传递给 Resolv::DNS 构造函数以进行 SRV 查找的选项。



51
52
53
54
55
# File 'build/Ruby-driver-v 2.19 /lib/mongo/srv/resolver.rb', 第51行

def 初始化(**opts)
  @options = opts.冻结
  @resolver = Resolv::DNS.new(@options[:resolv_options])
  @resolver.超时 = 超时
end

实例属性详细信息

# options哈希(只读)

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

返回解析程序选项。

返回:

  • (哈希)

    解析程序选项。



58
59
60
# File 'build/Ruby-driver-v 2.19 /lib/mongo/srv/resolver.rb', 第58行

def 选项
  @options
end

实例方法详细信息

# get_records (hostname, srv_service_name = nil, srv_max_hosts = nil) ⇒ Mongo::Srv::Result

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

获取给定主机名的所有 SRV 记录。 如果指定了 srv_max_hosts 且其大于0 ,则返回最大 srv_max_hosts 记录。

在找到域不匹配的记录或未找到记录的事件下,如果 :rise_on_invalid 选项为 true,则会引发异常,否则会记录警告。

参数:

  • 主机名 ( string )

    应获取其记录的主机名。

  • srv_service_name ( string | nil ) (默认为: nil

    DNS 查询的 SRV 服务名称。 如果为零,则使用“ MongoDB ”。

  • srv_max_hosts ( Integer | nil ) (默认为: nil

    要返回的最大记录数。 如果该值为 nil,则返回所有记录。

返回:

引发:



84
85
86
87
88
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
# File 'build/Ruby-driver-v 2.19 /lib/mongo/srv/resolver.rb', 第84行

def get_records(主机名, srv_service_name=nil, srv_max_hosts=nil)
  query_name = record_prefix(srv_service_name) + 主机名
  资源 = @resolver.getresources(query_name, Resolv::DNS::Resource::登录::SRV)

  # 将所有记录收集到一个 Result对象中,从而引发错误
  # 如果发现域不匹配的记录,则记录警告。
  # 请注意,如果出现警告,记录_not_
  # 添加到 Result对象。
  结果 = Srv::结果.new(主机名)
  资源. do |记录|
    开始
      结果.add_record(记录)
    救援 错误::MismatchedDomain => e
      if raise_on_invalid?
        提高
      else
        log_warn(e.message)
      end
    end
  end

  # 如果未找到记录,则引发错误或记录警告
  # 基于解析程序的 :raise_on_invalid 选项。
  if 结果.空?
    if raise_on_invalid?
      提高 错误::NoSRVRecords.new(URI::SRVProtocol::NO_SRV_RECORDS % 主机名)
    else
      log_warn(URI::SRVProtocol::NO_SRV_RECORDS % 主机名)
    end
  end

  # if srv_max_hosts is in [ 1 , #addresses)
  if (1...结果.Address_strs.长度).包括? srv_max_hosts
    sampled_records = 资源.随机播放.first(srv_max_hosts)
    结果 = Srv::结果.new(主机名)
    sampled_records. { |记录| 结果.add_record(记录) }
  end
  结果
end

# get_txt_options_string (hostname) ⇒ nil | string

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

获取托管的 TXT 记录。

参数:

  • 主机名 ( string )

    应获取其 TXT 记录的主机。

返回:

  • ( nil | string )

    来自与主机名关联的 TXT记录的 URI 选项string ,如果没有此类记录,则为 nil。

引发:



132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'build/Ruby-driver-v 2.19 /lib/mongo/srv/resolver.rb', 第132行

def get_txt_options_string(主机名)
  记录 = @resolver.getresources(主机名, Resolv::DNS::Resource::登录::TXT)
  if 记录.空?
    return nil
  end

  if 记录.长度 > 1
    msg = "只允许一条 TXT 记录:查询主机名#{ hostname }返回#{ records . length }条记录"

    提高 错误::InvalidTXTRecord, msg
  end

  记录[0].字符串.连接 (JOIN)
end

# record_prefix (srv_service_name = nil) ⇒ string

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

使用自定义 SRV 服务名称(如果提供)生成记录前缀。

参数:

  • srv_service_name 哈希 (默认为: nil

    一组可自定义的选项

选项哈希 ( srv_service_name ):

  • 使用 ( string | nil )

    要在记录前缀中使用的 SRV 服务名称。

返回:

  • ( string )

    生成的记录前缀。



38
39
40
# File 'build/Ruby-driver-v 2.19 /lib/mongo/srv/resolver.rb', 第38行

def record_prefix(srv_service_name=nil)
  return srv_service_name ? " _ #{ srv_service_name } ._tcp. " : RECORD_PREFIX
end

# timeout对象

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



60
61
62
# File 'build/Ruby-driver-v 2.19 /lib/mongo/srv/resolver.rb', 第60行

def 超时
  选项[:timeout] || 监控::DEFAULT_TIMEOUT
end