本文档介绍如何在火山引擎消息队列 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 | []string | 是 | RocketMQ 客户端的 NameServer 地址。 |
opt | Option | 否 | 缓存配置选项。参见 缓存配置选项。 |
缓存配置选项
参数 | 说明 |
---|
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 接口中的方法。 |