func NewAliMNSClientWithConfig()

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
}