Skip to content

Commit 5254c96

Browse files
committed
初始版本
1 parent 09ea1aa commit 5254c96

File tree

302 files changed

+24680
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

302 files changed

+24680
-0
lines changed

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 网易云信
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# yunxin-server-sdk
2+
3+
![GitHub](https://img.shields.io/badge/license-MIT-blue.svg)
4+
![GitHub release](https://img.shields.io/github/release/netease-im/yunxin-im-server-sdk.svg)
5+
![java_language](https://img.shields.io/badge/java--language-1.8-blue.svg)
6+
7+
## 核心特性
8+
9+
* 封装了云信服务器api的sdk
10+
* 支持重试,支持配置不同的重试策略,也支持自定义重试策略
11+
* 支持多域名高可用,故障自动切换
12+
* 支持多域名服务器调度,故障切换快速生效
13+
* 支持trace-id,方便问题排查
14+
* 支持metrics,支持prometheus格式输出
15+
* 支持使用raw-client直接发起请求,也支持使用面向对象的client发起请求
16+
* 支持云信以下功能模块的api:即时通讯(IM)、实时音视频(RTC)、短信(SMS)、直播(LIVE)、点播(VOD)、房间组件(NEROOM)、会议(MEETING)
17+
* 支持云信私有化环境使用
18+
19+
## 架构图
20+
21+
<img src="docs/img.png" width="60%" height="60%">
22+
23+
## 引入依赖
24+
25+
```
26+
require (
27+
github.com/netease-im/yunxin-server-sdk-golang v0.0.1
28+
)
29+
```
30+
31+
## 更新日志
32+
33+
具体见:[更新日志](update.md)
34+
35+
36+
## 快速开始
37+
38+
具体见:[快速开始](docs/quick_start.md)
39+
40+
41+
## 关于重试
42+
43+
具体见:[retry](docs/retry.md)
44+
45+
46+
## 关于多域名
47+
48+
具体见:[endpoint](docs/endpoint.md)
49+
50+
51+
## 关于监控
52+
53+
具体见:[metrics](docs/metrics.md)
54+
55+
56+
## 关于私有化
57+
58+
具体见:[privatization](docs/privatization.md)
59+
60+
## 其他
61+
62+
具体见:[others](docs/others.md)

docs/endpoint.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
2+
3+
## 多域名切换机制
4+
5+
* 内置了多个api域名,并且会定时从云信服务器更新最新api域名列表
6+
* sdk会定时探测各个api域名
7+
* sdk会根据各个api域名的请求结果和探测结果来动态调度(选择延迟最低、成功率最高的api域名)
8+
* 默认切换机制参考:`DynamicEndpointSelector`,你也可以自定义
9+
10+
```go
11+
package main
12+
13+
import (
14+
"time"
15+
16+
"github.com/netease-im/yunxin-server-sdk-golang/src/core"
17+
"github.com/netease-im/yunxin-server-sdk-golang/src/core/base"
18+
"github.com/netease-im/yunxin-server-sdk-golang/src/core/endpoint"
19+
)
20+
21+
func main() {
22+
// 初始化
23+
appkey := "xx"
24+
appsecret := "xx"
25+
timeoutMillis := 5000 * time.Millisecond
26+
27+
// EndpointSelector可以自定义
28+
endpointFetcher := endpoint.NewDynamicEndpointFetcher(base.BizIM, appkey)
29+
endpointSelector := endpoint.NewDynamicEndpointSelector(base.BizIM, endpointFetcher)
30+
31+
// 创建客户端
32+
client := core.NewYunxinApiHttpClientBuilder(base.BizIM, appkey, appsecret).
33+
TimeoutMillis(timeoutMillis).
34+
EndpointSelector(endpointSelector).
35+
Build()
36+
37+
// 使用client进行API调用
38+
_ = client
39+
}
40+
```

docs/img.png

49.2 KB
Loading

docs/infra.drawio

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<mxfile host="Electron" modified="2025-06-17T09:58:58.102Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/15.7.3 Chrome/91.0.4472.164 Electron/13.6.1 Safari/537.36" etag="rGVqDZyBwlRk8sXcez0K" version="15.7.3" type="device"><diagram id="NSgs6cozZJK3MAMpw4jA" name="第 1 页">1Vptk6I4EP41qbr74BQQXpKP4MvuVu3c7p13+/IRISg3KG6Io86v3wSCAsnM3I3oqmWVSSc05Hk6ne5GAIfL3Tsarhf3eUwyYBnxDsARsCwTQ8h/hGRfSTzXqwRzmsZy0lEwTZ+IFBpSukljUrQmsjzPWLpuC6N8tSIRa8lCSvNte1qSZ+27rsM5UQTTKMxU6dc0ZotKiizvKH9P0vmivrPp4mpkGdaT5UqKRRjn24YIjgEc0jxnVWu5G5JMgFfjUl03eWb08GCUrNh/uWC/Ru+LT/6nezvZO8HXP364/0wHUstjmG3kguXDsn2NAM03q5gIJQaAwXaRMjJdh5EY3XLOuWzBlhnvmbypPlR9B0IZ2TVE8iHfkXxJGN3zKXJ0YCKJmDQZy5P9bYMA5FSyRQN8p54YStLnB+VHXHhDQqOH6c/Rv9vVjy/L5CmLcvNxU0D3+8BVYNpvVrt0NSgI5SsbFPHDabgJeFJudX6WzldcNssZy5d8IEmzbJhnOS2VwgRFJIq4vGA0fyCNkRlybMfohwLstAgQersE2DoCLPtcBHjPEbBgbD2IslQs9jIMJImlZyB2Z67j9sOAaXQo0OwB29VQYJ6NAqS6irEDAh9waxENEyAu8UAwAtgsGwHAw3oOPwbcjD9jMKO8NRet3/IHwV5F3u+nsdchKXYIim0dSciaQbcvkqy2o7KRhqSajyZJ7rk4whqOMEAeQCMwRsCfgHpr9wQ0xpMJxucG2oJtoB2NQzINDdBn2wym5uDklu7bAPuigSfiKxpGib0DEBI8jF3R9U88ZX8JCV1rvwISLIUERgVmtwcutK8OXKiAKxSnUXGD8B4imJfgNS8Kr63A++G+V2QNY8I/2kDFwzOjp1Cx6xVcSxOsXxRYRwH2r7+HN4jsIQW+GmTVLGh6P71BZKFxbciq6c3HD1/GtwgtvjZo1bTlrvzcILg2+nXgaqtHavwFxjYIkAyCkQ98U+QdAQ+CoUgJsQ18JIJg7IIA90pBHBKUaPNyN0JklvRUGWkz4NV1wGbGhy9JgRqlKaiSVeyLSijvRVlYFGnUBrKNOtml7Jto3zmy970xMto1O3vZeRbYIt/QiLxuQSRuVWFV+Bv4Ohp4axklWcjSx3btVoe5vMPnPBV1o+e8l2N0aKvWI6+yGrXWriLYLt+4uKOIhXROmKKoNIHDst9uFepJLeoAuMw8q6RUlGgcURDg21DsULPcqjw7HQO/rOegCfChakucqI/hjGRtEwpl0SziBkCoppq2TONY6AgoKdKncFbqE6azFhCUoDgBcEZaY3rR8Ltb9/AqQN4ENKvt2nqzcQdh/ZqiLjn3Yk6DttKalVpBniQFOQv9am6hq0kc/HJZofPd0i8P63JF6bv7dNDEjB3i6Rw0dj0Y9pTpDbqZnq2ekYecpe+anJYMNR/py0M3/fPBW+s9NAeU7r9JdWWncZXoHi8re//Ls79YIas83evGeiVHgNUtxLz1COiGCocSxIWOADWlONXsahMy7jyM2maEMXzFkMreZ0JTvi5xQnRiDQ83jJl7ZMN6xZ55p6vt5CikaaovvYW6ElO1PbdlYZ51o6aqpmg03NYv9W4pJqn3XD8xCULt8ME8zWrq0KZzxVuiEN49/m+hmn789wcc/wQ=</diagram></mxfile>

docs/metrics.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
2+
3+
## metrics
4+
5+
* 默认开启,可以关闭
6+
* 支持配置统计周期
7+
* 有2个维度,一个是endpoint维度,一个是uri维度,统计了请求的成功/失败数量,耗时的平均、最大、分位数(p50/p75/p90/p99/p999)
8+
* 支持以prometheus格式输出,也支持自定义输出
9+
* 可以定时获取数据,也可以使用MetricsCallback主动接受数据推送
10+
* 数据字段参考 `Stats` 结构体和 `PrometheusConverter` 相关代码
11+
12+
```go
13+
package main
14+
15+
import (
16+
"encoding/json"
17+
"fmt"
18+
"time"
19+
20+
"github.com/netease-im/yunxin-server-sdk-golang/src/core"
21+
"github.com/netease-im/yunxin-server-sdk-golang/src/core/base"
22+
"github.com/netease-im/yunxin-server-sdk-golang/src/core/metrics"
23+
)
24+
25+
func main() {
26+
// 初始化
27+
appkey := "xx"
28+
appsecret := "xx"
29+
timeoutMillis := 5000 * time.Millisecond
30+
31+
// 定义metrics回调函数
32+
metricsCallback := func(stats *metrics.Stats) {
33+
fmt.Println("receive stats callback")
34+
jsonBytes, _ := json.MarshalIndent(stats, "", " ")
35+
fmt.Println(string(jsonBytes))
36+
}
37+
38+
// 创建客户端
39+
client := core.NewYunxinApiHttpClientBuilder(base.BizIM, appkey, appsecret).
40+
TimeoutMillis(timeoutMillis).
41+
MetricEnable(true). // 默认true
42+
MetricCollectIntervalSeconds(60). // 默认60s
43+
MetricsCallback(metricsCallback). // 设置回调
44+
Build()
45+
46+
// 你可以60s调用一次GetStats方法获取数据,也可以用MetricsCallback获取数据
47+
48+
// 获取统计数据,可以自定义格式输出到监控系统
49+
stats := client.GetStats()
50+
jsonBytes, _ := json.MarshalIndent(stats, "", " ")
51+
fmt.Println(string(jsonBytes))
52+
53+
// 转换为prometheus格式
54+
prometheusStr := metrics.ConvertToPrometheus(stats)
55+
fmt.Println(prometheusStr)
56+
}
57+
```
58+

0 commit comments

Comments
 (0)