Skip to content

Commit 8c7b7f2

Browse files
committed
简化 zerg_crawl 调用样例代码
1 parent 3293416 commit 8c7b7f2

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818

1919
我把 etcd 容器化了,并开发了脚本使得部署 etcd cluster 非常容易,见 [github.com/huichen/etcd_docker](https://github.com/huichen/etcd_docker)
2020

21-
为了容灾,请至少在三台服务器上运行 etcd 实例。为了方便调用,你可以固定 etc endpoint 的端口号,并在所有机器上手工添加 etcd host 的hostname
21+
为了容灾,请至少在三台服务器上运行 etcd 实例。为了方便调用,你可以固定 etc endpoint 的端口号,并在所有机器上手工添加 etcd host 的 hostname
2222

2323
#### 第二步:启动 registrator 服务发现程序
2424

25-
你需要在集群的每一台服务器上都运行 registrator,这使得我们可以自动发现和注册 dist_crawl 服务
25+
你需要在集群的每一台服务器上都运行 registrator,这使得我们可以自动发现和注册分布式服务
2626

2727
```
2828
docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock \
@@ -45,7 +45,7 @@ docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/d
4545
docker run -d -P -v /opt/zerg_cache:/cache unmerged/zerg
4646
```
4747

48-
registrator 会自动注册这些服务到 etcd。如果单机有多个IP,你可以单机启动多个容器,并在 -P 中分别指定IP
48+
registrator 会自动注册这些服务到 etcd。如果单机有多个 IP,你可以单机启动多个容器,并在 -P 中分别指定 IP
4949

5050
抓取的页面内容会通过 docker volume 存储在 /opt/zerg_cache 目录下。
5151

example/zerg_crawl.go

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
)
1010

1111
var (
12-
address = flag.String("address", ":50051", "服务器地址")
1312
url = flag.String("url", "", "URL")
1413
freq = flag.Int64("freq", 0, "抓取频率")
1514
endPoints = flag.String("endpoints", "", "半角逗号分隔的 etcd 接入点列表,每个接入点地址以 http:// 开始")
@@ -19,30 +18,30 @@ var (
1918
func main() {
2019
flag.Parse()
2120

22-
if *url == "" {
23-
log.Fatal("--url 参数不能为空")
24-
}
25-
21+
// 创建新 ZergClient
2622
zc, err := zerg_client.NewZergClient(*endPoints, *serviceName)
2723
if err != nil {
2824
log.Fatal(err)
2925
}
3026
defer zc.Close()
3127

32-
request := pb.CrawlRequest{Url: *url, Timeout: 10000, CrawlFrequency: *freq}
33-
log.Printf("开始抓取")
34-
for i := 0; i < 10; i++ {
35-
// 调用 client.Crawl 前必须先调用 Get 命令获取 client,client 通过 url 的一致性哈希进行分配
36-
client, err := zc.Get(*url)
37-
if err != nil {
38-
log.Fatal(err)
28+
// 调用 client.Crawl 前必须先调用 Get 命令获取 CrawlClient,通过 url 的一致性哈希进行分配
29+
// 不同的 url 要分别调用 Get 得到不同的 CrawlClient
30+
if crawlClient, err := zc.Get(*url); err == nil {
31+
// RPC 调用
32+
request := pb.CrawlRequest{
33+
Url: *url,
34+
Timeout: 10000, // 超时 10 秒
35+
CrawlFrequency: *freq,
3936
}
40-
41-
response, err := client.Crawl(context.Background(), &request)
37+
response, err := crawlClient.Crawl(context.Background(), &request)
4238
if err != nil {
39+
// 处理异常
4340
log.Fatal(err)
4441
}
45-
log.Printf("%+v", response.Metadata)
46-
log.Printf("%d", len(response.Content))
42+
43+
// 处理返回结果
44+
log.Printf("metadata = %+v", response.Metadata)
45+
log.Printf("page content length = %d", len(response.Content))
4746
}
4847
}

0 commit comments

Comments
 (0)