[关闭]
@bergus 2016-03-21T20:51:21.000000Z 字数 1679 阅读 4402

consul 简单教程

consul


Consul

目前仅考虑开发环境

Consul是用go语言编写的,提供方便的服务注册与发现、全局配置等分布式系统所需要的核心功能。尤其非常适合当前微服务架构模式下的核心功能解决。

获取Consul

Consul是一个非常简单的应用,没有庞大的依赖体系,简单下载一个文件就能解决安装问题,下载路径为:下载Consul

开发环境配置

理论上,分布式环境中的每台机器都应该作为一个Node加入Consul,其中至少3台节点(最好是5台)作为Server,其余节点都作为Client,建立部署环境的配置方法我在这里就不说了,可以自习研读官方文档。

开发阶段,执行如下命令就可以快速启动一个Consul环境,当然,也要求所有的微服务都跑在同一个虚拟机上:

  1. consul agent -dev -bind 127.0.0.1 > ./consul.log 2>&1 &

在咱们的开发服务器上,我已经跑了一个consul的服务,大家可以直接用了,不用再次启动

注册微服务

注册微服务也非常简单,只需要通过curl命令调用consul提供的HTTP restful的接口就可以了,例如我启动account服务后,将服务的地址和端口号注册到consul中,命令如下:

  1. curl -X PUT -d '{"Name":"account", "Port": 13010}' -i http://localhost:8500/v1/agent/service/register

发现微服务

发现微服务最好的方法是使用DNS,我推荐dns-clb-go来完成dns解析,如果有多个服务,这个包还可以做服务之间的选择,支持一些很简单的选择策略(如RoundRobin等)。

上面account注册服务后,采用account.service.dc1.consul进行解析和发现,具体代码如下:

  1. import (
  2. "github.com/benschw/dns-clb-go/clb"
  3. )
  4. const (
  5. consulHost = "127.0.0.1"
  6. consulPort = "8600"
  7. srvName = "account.service.dc1.consul"
  8. )
  9. ...
  10. func main() {
  11. c := clb.NewClb(consulHost, consulPort, clb.RoundRobin) // 这两行是关键
  12. address, err := c.GetAddress(srvName)
  13. if err != nil {
  14. log.Fatal(err)
  15. }
  16. transportFactory := thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())
  17. protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
  18. transport, err := thrift.NewTSocket(address.String()) // 这里的addess.String() 就是 "127.0.0.1:13010"
  19. if err != nil {
  20. log.Fatalf("error resolving %s : %s", address.String(), err)
  21. }
  22. useTransport := transportFactory.GetTransport(transport)
  23. accountService = account.NewAccountServiceClientFactory(useTransport, protocolFactory)
  24. if err := transport.Open(); err != nil {
  25. log.Fatalf("error connecting to %s : %s", address.String(), err)
  26. }
  27. log.Infof("Connected to AccountService %s", address.String())
  28. }

Consul的作用

Consul还有一个重要作用,就是可以作为全局的key/value的存储,可用于全局配置,详细使用大家可以参考consul/api

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注