中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

10秒鐘,讓你的方法變?yōu)镽PC服務(wù)

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

rpcx 一個服務(wù)治理的Go RPC框架, 擁有非常多的特性,支持跨語言的服務(wù)調(diào)用。 眾多的特性可以參考 doc.rpcx.site 。它的服務(wù)治理的特性深受阿里巴巴的Dubbo框架的啟發(fā)。

在實際的產(chǎn)品應(yīng)用中,用戶使用兩臺服務(wù)器+8臺日志搜集服務(wù)(Client),輕松處理每天幾十億的服務(wù)調(diào)用, 除了中間一個路由器硬件閃斷, 整個系統(tǒng)平穩(wěn)運行多半年。 相比較之前Java的實現(xiàn), 服務(wù)器節(jié)省了一般。 用戶使用rpcx框架重構(gòu)后的系統(tǒng)每月為公司節(jié)省了幾十萬港元的成本。

rpcx框架的一個設(shè)計哲學(xué)就是 簡單 。不希望用戶需要花費大量的時間在框架的學(xué)習(xí)上,并且不需要proto文件或者重復(fù)且冗余的服務(wù)配置。最少只需要10行代碼就可以創(chuàng)建一個服務(wù), 如果需要額外的配置,也只需要幾十行的代碼。

雖然rpcx開發(fā)簡單,但是作為開發(fā)人員來說,如果可以更加的偷懶, 那更是極好的一件事情了,這就是 xgen 開發(fā)的目的。

這個工具可以搜尋指定的 package 下可以配置成rpcx服務(wù)的類型, 并且生成一個服務(wù)器程序,將這些服務(wù)注冊到服務(wù)器程序中。你可以指定是否需要 zookeeper 、 etcd 、 consul 作為注冊中心。

這個工具的開發(fā)參考了Go的tools的實現(xiàn)以及DigitalOcean公司的Fatih Arslan

開發(fā)的 gomodifytags 的實現(xiàn)。

首先看一下這個工具參數(shù):

$ xgen -h
Usage of xgen:
  -o string
    	specify the filename of the output
  -pkg
    	process the whole package instead of just the given file
  -r string
    	registry type. support etcd, consul, zookeeper, mdns
  -tags string
    	build tags to add to generated file

你可以使用 xgen file1.go file2.go file3.go 搜尋指定的文件生成服務(wù),也可以 xgen -pkg github.com/rpcx-ecosystem/rpcx-examples3/xgen 為 GOPATH 中指定的 package 生成服務(wù)。 -pkg 選項優(yōu)先于程序參數(shù)。

-o 選項指定生成的程序輸出到哪個文件,如果不指定,則輸出到控制臺 Stdout 。

-r 選項指定注冊中心的類型,支持 zookeeper 、 etcd 、 consul 和 mdns 。如果不指定,則采用點對點的rpc調(diào)用方式。

-tags 選項指定生成的文件是否要加上 build conditions 。

看一個例子, rpcx-examples3/xgen 中有一個server.go文件,它定義幾個類型和方法。

package xgen

import (
	"context"
	"fmt"
	"time"

	example "github.com/rpcx-ecosystem/rpcx-examples3"
)

type Arith int

func (t *Arith) Mul(ctx context.Context, args example.Args, reply *example.Reply) error {
	reply.C = args.A * args.B
	return nil
}

func (t *Arith) Add(ctx context.Context, args *example.Args, reply *example.Reply) error {
	reply.C = args.A + args.B
	return nil
}

type Echo string

func (s *Echo) Echo(ctx context.Context, args string, reply *string) error {
	*reply = fmt.Sprintf("Hello %s from %s", args, *reply)
	return nil
}

type TimeS struct{}

func (s *TimeS) Time(ctx context.Context, args time.Time, reply *time.Time) error {
	*reply = time.Now()
	return nil
}

這三個類型 Arith 、 Echo 、 TimeS 都有符合rpcx服務(wù)的方法。

rpcx的服務(wù)的方法需要滿足下面的規(guī)則:

  • 類型和參數(shù)都是exported
  • 方法有三個參數(shù),并且第一個參數(shù)是 context.Context
  • 方法的第三個參數(shù)是指針類型
  • 方法類型為error

現(xiàn)在你就可以使用 xgen 生成服務(wù)端代碼。

xgen -o cmd/main.go -r "etcd" -pkg github.com/rpcx-ecosystem/rpcx-examples3/xgen

或者

xgen -o cmd/main.go -r "etcd" ./server.go

這樣就生成了一個服務(wù)器端的代碼。

你可以運行你的服務(wù)器了: go run cmd/main.go ,就這么簡單。

 

來自:http://colobu.com/2018/02/13/make-your-methods-as-services-in-10-seconds/

 

標(biāo)簽: dns 代碼 服務(wù)器 服務(wù)器端

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:WebSocket協(xié)議深入探究

下一篇:Android 內(nèi)存暴減的秘密?!