NSQ:golang-NSQ源码阅读 2-NSQ功能测试 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
NSQ使用体验installingNSQ的官方安装指南,建议使用go get命令,将NSQ项目源码和依赖库都下到本地方便阅读。
配置完成后,执行项目目录下的“./test.sh”脚本,可生成NSQ的二进制执行文件。
执行测试服务端测试搭建1.执行NSQ拓扑监控守护进程:nsqlookupd
nsqlookupd
默认情况下,执行如下命令行参数:
12-http-address="0.0.0.0:4161": <addr>:<port>`监听 HTTP 客户端-tcp-address="0.0.0.0:4160": TCP 客户端监听的 <addr>:<port>其中,TCP端用于监听nsqd挂载。
2.另起终端,执行nsqd,并将其挂载到启动后的nsqlookupd监控端口上。
nsqd --lookupd-tcp-address=127.0.0.1:4160
注:nsqd没有对nsqlookupd的HTTP端口挂载。
默认情况下,端口4151为HTTP监听端口,4150为TCP监听端口,向这两个端口发送消息,则会进入NSQD消息队列。
3.开第三个终端,启动NSQ...阅读全文

goa-2-简单实现RESTful 微服务 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
使用Goa微服务环境搭建首先目录文件一定要创建在$GOPATH/src下,假设做一个cellar服务,首先创建目录$GOPATH/src/cellar, 然后在此目录下创建子文件夹design和文件design/design.go。
示例代码source code list在文件design/design.go中写入代码:
1234567891011121314151617181920212223242526272829303132333435363738394041package designimport (        . "github.com/raphael/goa/design"        . "github.com/raphael/goa/design/dsl")var _ = API("cellar", func() {        Title("The virtual wine cellar")        Description("A basic example of an API implemented with goa")        Scheme...阅读全文

golang命令行参数解析-flag | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
golang flagflag是标准库中实现的命令行工具,可支持命令行参数格式如下:
1234-flag xxx (使用空格,一个 - 符号)--flag xxx (使用空格,两个 - 符号)-flag=xxx (使用等号,一个 - 符号)--flag=xxx (使用等号,两个 - 符号)其中,布尔类型的参数防止解析时的二义性,应该使用等号的方式指定。
用法命令行设置1.flag.Xxx(),其中Xxx可以是Int、String等;返回一个相应类型的指针,如:
var ip = flag.Int("age", 1234, "help message for age")或者:flag.XxxVar(),将flag绑定到一个变量上,如:
12var flagvar intflag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")上面两种方法通用。
其中,int类型可以是十进制、十六进制、八进制甚至是负数;bool类型可以是1, 0, t, f, true, false, TRUE, FALSE,...阅读全文

goa-3-Goa.runtime总结 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
goaRuntime 在goa package中做了实现,包括HTTP request state和response行为管理、基本数据结构和算法的实现、日志记录、错误处理和支持版本控制等功能。
Goa 行为上下文管理(action context)Goa 通过实现一个数据结构,并存在于所有的Goa controller实现(以第一个参数传参的方式),来实现行为的上下文管理。该方法是参考google实现的接口间信息传递的方法,同时根据Goa自身情况做了修改。
与其他Go实现的web框架类似,Goa的REST 资源(行为上下文)会开放接口供外部访问。像路径参数、查询结果这样的API可以直接通过GET方法来获取返回值。在此基础上Goa更进一步,用户通过goagen工具生成的代码中,根据design中指定的参数type进行强制准入检验。比如,我们在design时定义一个类型为Integer的ID,则goagen生成的ID字段中也会定义为int,并对该资源的访问进行健壮性检验(比如对ID赋值string时会返回错误),防止在server内部将收到的值赋值给结构体时发生错误。
同样,在wri...阅读全文

golang HttpRouter | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
Goa项目http router的底层使用的是第三方包httprouter
httprouterHttpRouter是一个Go下轻量高效的 HTTP request router(also called multiplexer)。
usage123456789101112131415161718192021222324package mainimport (    "fmt"    "github.com/julienschmidt/httprouter"    "net/http"    "log")func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {    fmt.Fprint(w, "Welcome!\n")}func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {    fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name"))}func main()...阅读全文