in client.go [138:201]
func NewAliMNSClientWithConfig(clientConfig AliMNSClientConfig) MNSClient {
if clientConfig.EndPoint == "" {
panic("ali-mns: message queue url is empty")
}
cli := new(aliMNSClient)
cli.Timeout = clientConfig.TimeoutSecond
if clientConfig.Credential != nil {
cli.credential = clientConfig.Credential
} else if clientConfig.Token != "" {
config := new(credentials.Config).
SetType("sts").
SetAccessKeyId(clientConfig.AccessKeyId).
SetAccessKeySecret(clientConfig.AccessKeySecret).
SetSecurityToken(clientConfig.Token)
var err error
cli.credential, err = credentials.NewCredential(config)
if err != nil {
panic(err)
}
} else {
config := new(credentials.Config).
SetType("access_key").
SetAccessKeyId(clientConfig.AccessKeyId).
SetAccessKeySecret(clientConfig.AccessKeySecret)
var err error
cli.credential, err = credentials.NewCredential(config)
if err != nil {
panic(err)
}
}
if clientConfig.MaxConnsPerHost != 0 {
cli.MaxConnsPerHost = clientConfig.MaxConnsPerHost
} else {
cli.MaxConnsPerHost = DefaultMaxConnsPerHost
}
var err error
if cli.url, err = neturl.Parse(clientConfig.EndPoint); err != nil {
panic("err parse url")
}
// 1. parse region and accountId
pieces := strings.Split(clientConfig.EndPoint, ".")
if len(pieces) != 5 {
panic("ali-mns: message queue url is invalid")
}
accountIdSlice := strings.Split(pieces[0], "/")
cli.accountId = accountIdSlice[len(accountIdSlice)-1]
re := regexp.MustCompile("-(internal|control)")
regionSlice := re.Split(pieces[2], -1)
cli.region = regionSlice[0]
if globalUrl := os.Getenv(GlobalProxy); globalUrl != "" {
cli.proxyURL = globalUrl
}
// 2. now init http client
cli.initFastHttpClient()
//change to dial dual stack to support both ipv4 and ipv6
cli.client.DialDualStack = true
return cli
}