开发者社区> pythonstock> 正文

grpc(5):使用grpc+consul 开发服务调用

简介: 1,consul 服务发现 在使用了几次之后终于感受到了这个系统挺好的了。 在一个小的团队里面,要做服务发现,做的简单高效。 可以直接使用 consul 作为服务发现,服务检查的系统。 不用自己去开发了。真的很方便,只要部署下就可以了。 github 上放了代码,都是很简单的。 https://github.com/freewebsys/grpc-go-demo
+关注继续查看

1,consul 服务发现


在使用了几次之后终于感受到了这个系统挺好的了。
在一个小的团队里面,要做服务发现,做的简单高效。
可以直接使用 consul 作为服务发现,服务检查的系统。
不用自己去开发了。真的很方便,只要部署下就可以了。
github 上放了代码,都是很简单的。
https://github.com/freewebsys/grpc-go-demo

2,重新研究consul启动


发现之前是使用dig 进行操作的,因为consul官方网站也是推荐使用的。
但是其实可以使用ping ,nslookup 也是一样的。
但是需要修改consul的端口。

consul agent -dev -ui -server -node=consul-dev -client=10.0.2.15 -dns-port=53 -domain=freeweb.consul 

-dns-port=53 是将consul伪装成一个dns服务器。
-domain=freeweb.consul 是设置自己域。
这样就可以伪装成一个dns服务器了。
有些时候觉得一个服务发现还要dns,感觉上多重啊。
感觉上和dubbo的服务比起来好奇怪啊。
但是正是因为这个dns才使得服务发现变的很简单了。
并且使用dns也非常符合运维同学的胃口。
他们也有很多办法保证dsn没有问题。

使用go 创建 3个服务,其中第三个服务端口错误。

func TestRegister(t *testing.T) {

    fmt.Println("test begin .")
    config := consulapi.DefaultConfig()
    //config.Address = "localhost"
    fmt.Println("defautl config : ", config)
    client, err := consulapi.NewClient(config)
    if err != nil {
        log.Fatal("consul client error : ", err)
    }

    //创建一个新服务。
    registration := new(consulapi.AgentServiceRegistration)
    registration.ID = Id + "01"
    registration.Name = "user-tomcat"
    registration.Port = 8080
    registration.Tags = []string{"group:user-tomcat-01"}
    registration.Address = "127.0.0.1"

    //增加check。
    check := new(consulapi.AgentServiceCheck)
    check.HTTP = fmt.Sprintf("http://%s:%d%s", registration.Address, registration.Port, "/check")
    //设置超时 5s。
    check.Timeout = "5s"
    //设置间隔 5s。
    check.Interval = "5s"
    //注册check服务。
    registration.Check = check
    log.Println("get registration : ", registration)
    err = client.Agent().ServiceRegister(registration)
    if err != nil {
        log.Fatal("register server error : ", err)
    }

    //设置第二个对象。注册两个tomcat。
    registration.ID = Id + "02"
    registration.Name = "user-tomcat"
    registration.Address = "10.0.2.15"
    registration.Tags = []string{"group:user-tomcat-02"}
    log.Println("get registration : ", registration)
    err = client.Agent().ServiceRegister(registration)
    if err != nil {
        log.Fatal("register server error : ", err)
    }

    //设置第3个对象。注册两个tomcat。
    registration.ID = Id + "03"
    registration.Name = "user-tomcat"
    registration.Address = "10.0.2.16"
    registration.Tags = []string{"group:user-tomcat-03"}
    check.HTTP = fmt.Sprintf("http://%s:%s%s", registration.Address, "8083", "/check")
    log.Println("get registration : ", registration)
    err = client.Agent().ServiceRegister(registration)
    if err != nil {
        log.Fatal("register server error : ", err)
    }
}

然后配置dns服务器:
/etc/resolv.conf 中配置了多个 nameserver:

nameserver 10.0.2.15

在使用nslookup 命令:

# nslookup  user-tomcat.service.freeweb.consul
Server:         10.0.2.15
Address:        10.0.2.15#53

Name:   user-tomcat.service.freeweb.consul
Address: 10.0.2.15
Name:   user-tomcat.service.freeweb.consul
Address: 127.0.0.1

#也可以ping通了。
# ping user-tomcat.service.freeweb.consul
PING user-tomcat.service.freeweb.consul (10.0.2.15) 56(84) bytes of data.
64 bytes from localhost.localdomain (10.0.2.15): icmp_seq=1 ttl=64 time=0.008 ms
64 bytes from localhost.localdomain (10.0.2.15): icmp_seq=2 ttl=64 time=0.028 ms

就可以发现只有2个tomcat服务了。

3,一个简单的grpc+consul架构



一个简单的grpc + consul 组成的架构就做好了。
服务的注册,发现使用 consul,因为consul 自带check检查。
如果服务没有了。自动会将服务摘除掉。
服务rpc框架使用grpc,服务只是在每次链接的使用访问下consul的dns服务。
连接上了之后 就是http2 二进制传输了,那个使用的是grpc的事情了。
同时也方便开发了,配置好了dns就可以直接使用域名进行访问了。
开发&运维也超级方便了。并且consul 也支持集群。
dns服务器也可以配置多个consul。也方便运维。

4,总结


本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/60779640 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

新的技术带来了新的理念。将开发运维变的更加的简单了。
在公司要进行业务拆分的时候能最快的将注册中心,服务发现。
都搭建好,而且还是简单高效的进行rpc开发。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
8 月份 GitHub 最火的 6 个 Java 开源项目
8 月份 GitHub 上最热门的 Java 开源项目排行新鲜出炉,一起来看看~
7 0
手撸一款简单高效的线程池(三)—— 性能优化!
在上一章中,我们给大家介绍了一些 C++线程池中的优化思路和实现方案。这一章中,我们将继续这个主题,接着聊线程池中还有可以“压榨”的空间。为实现我们吹过的牛 B,而继续编程
5 0
心中有“树”!图文并茂介绍数据结构中常见的树(一)
提到数据结构中的树(Tree) ,大家应该都不陌生,相关书籍中都有大段篇幅的介绍,刷 Leetcode 的时候会遇到很多相关问题。很多人往往会用 “手写红黑树” 来形容面试难度很高。
10 0
JSP - 起源、执行过程、运行原理、生命周期
JSP - 起源、执行过程、运行原理、生命周期
6 0
+关注
pythonstock
数据库算法相关专家
393
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载