go 常用第三方包

hystrix-go

hystrix 是一个容错库,旨在隔离指向远程系统,服务和第三方的请求,杜绝练级故障,并在复杂的分布式系统中实现弹性。

github地址:[https://github.com/afex/hystrix-go]

特点

  1. hystrix作用在客户端,客户端程序依赖hystrix相关的第三方包,使得客户端与所依赖的服务,形成隔离(goroutine的隔离)。依赖服务的延迟与失败变的可控。保护调用者goroutine的执行。
  2. 避免了分布式系统中,单个组件的失败导致的级联影响。
  3. 快速失败,迅速恢复。 hystrix有快速失败机制,单个组件服务失败率到一定程度后,再请求,会直接响应失败。再这之后,会有重试机制。减少系统在错误服务调用上的开销。
  4. 降级应用

hystrix的设计原则

  1. 防止任何单个依赖服务耗尽所有用户线程

  2. 直接响应失败,而不是一直等待

  3. 提供错误返回接口,而不是让用户线程直接处理依赖服务抛出的异常

  4. 使用隔离或熔断技术来降低并限制单个依赖对整个系统造成的影响

demo

package main

import (
	"fmt"
	"net/http"
	"time"

	"github.com/afex/hystrix-go/hystrix"
)

func main() {
	hystrix.Go("get_baidu", func() error {
		// talk to other services
		_, err := http.Get("https://www.baidu.com/")
		if err != nil {
			fmt.Println("get error")
			return err
		}
		return nil
	}, func(err error) error {
		fmt.Println("get an error, handle it")
		return nil
	})

	time.Sleep(2 * time.Second) // 调用Go方法就是起了一个goroutine,这里要sleep一下,不然看不到效果
}

gorilla/mux

gorilla/mux实现了一个请求路由器和调度程序,用于将传入的请求与其各自的处理程序进行匹配。

特点

1、支持restful风格
2、支持正则
3、支持域名限定
4、支持middleware

缺点:

1、暂无支持group的概念

demo

package main

import (
	"fmt"
	"log"
	"net/http"

	"github.com/gorilla/mux"
)

func YourHandler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Gorilla!\n"))
}

func ArticlesCategoryHandler(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	w.WriteHeader(http.StatusOK)
	fmt.Fprintf(w, "Category: %v\n", vars["id"])
}

func main() {
	r := mux.NewRouter()
	r.HandleFunc("/", YourHandler)
	// Routes consist of a path and a handler function.
	r.HandleFunc("/products/{id:[0-9]+}", ArticlesCategoryHandler).Host("127.0.0.1").Methods("GET")
	// Bind to a port and pass our router in
	log.Fatal(http.ListenAndServe(":8000", r))
}

你可能感兴趣的:(Go)