You need to enable JavaScript to run this app.
导航
为消息队列 RocketMQ 版集成 DNS 高可用插件
最近更新时间:2024.01.15 16:19:59首次发布时间:2024.01.15 16:19:59

本文档介绍如何在火山引擎消息队列 RocketMQ 版的 Golang 客户端中集成 dns-stale-cache 插件。

前提条件

把 dns-stale-cache 插件集成到 SDK 工程

参见以下示例代码。

rocketmq-client-go SDK v2

import (
    "fmt"
    "os"

    "github.com/apache/rocketmq-client-go/v2/producer"
    . "github.com/volcengine/dns-stale-cache/common"
    . "github.com/volcengine/dns-stale-cache/rocketmq/v2"
)

func NewMQ() {
    addrs := []string{"127.0.0.1:9876"}

    p, _ := producer.NewDefaultProducer(
        producer.WithNsResolver(NewCacheResolver(addrs,
           WithCacheFirst(true),
           WithIPConsistance(true),
           WithDnsTimeout(2*time.Second),
        )),
        producer.WithRetry(2),
    )
    err := p.Start()
    if err != nil {
       fmt.Printf("start producer error: %s", err.Error())
       os.Exit(1)
    }
}

API 参考

func NewCacheResolver

NewCacheResolver(addr []string, opts ...Option)

输入参数

参数名称类型是否必选说明
addr[]stringRocketMQ 客户端的 NameServer 地址。
optOption缓存配置选项。参见 缓存配置选项


缓存配置选项

参数说明
func WithCacheFirst(preferUse bool) Option是否优先返回缓存中匹配的查询结果。
  • true:域名解析时,优先返回缓存中匹配的查询结果,同时异步向 DNS 服务器发起 DNS 查询请求,并使用查询结果刷新缓存。
  • false:(默认)域名解析时,优先从 DNS 服务器获取查询结果。如果获取失败,再使用缓存中匹配的查询结果。
func WithIPConsistance(preferUse bool) Option是否把在内存中缓存的查询结果保存到文件。
  • false:(默认)不把缓存的查询结果保存到文件。
  • true:把缓存的查询结果保存到文件。默认路径是 /home/ip_info
func WithDnsTimeout(timeout time.Duration) Option向 DNS 服务器发起 DNS 查询请求的超时时间。如果在超时前没有获取查询结果,会使用缓存中匹配的查询结果。默认值为 1 s。

返回参数

类型说明
*CacheResolver实现 NsResolver 接口中的方法。