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

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开发。

时间: 2024-09-08 15:06:01

grpc(5):使用grpc+consul 开发服务调用的相关文章

grpc(4):使用 golang 调用consul api 接口,注册user-tomcat服务

1,关于consul dubbo的注册中心是zookeeper,redis. motan的注册中心是zookeeper,consul. kubernetes的注册中心是 etcd. 使用consul的好处是服务发现啥的都支持了. 可以使用域名进行负载均衡. 也是一个不错的 Server-Side Discovery Pattern . 2,启动consul服务,调用接口 首先要在服务器安装一个consul服务: http://blog.csdn.net/freewebsys/article/de

ASPX页Web服务调用性能优化

摘要:本文介绍了如何通过异步方法消除使用MicrosoftASP.NET的Web服务调用的性能问题和线程池资源的消耗问题. 情况:从ASP.NET页面调用Web服务时的性能破坏 我们在本文中讨论Web服务时,期望在各种情况下都可以享用Web服务.一个主要的情况是从中间层环境(如ASP.NETWeb页面)访问Web服务.为MapPoint.NETWeb服务的用户提供支持的人员经常收到这样的问题,即用户在使用其Web服务时,对MapPoint.NET的调用可能需要相当长的时间.这本身并不是什么问题,

.NET的动态编译与WS服务调用详解

这篇文章介绍了.NET的动态编译与WS服务调用详解,有需要的朋友可以参考一下,希望对你有所帮助       动态编译与WS服务,有关系么?今天就乱弹一番,如何使用动态编译动态生成WS服务调用的代理类,然后通过这个代理类调用WS服务.     首先,动态编译这玩意在.NET里面是非常简单的,实际上只涉及到两个类型:CodeDomProvider以及CompilerParameters他们都位于System.CodeDom.Compiler命名空间.     以下代码可将源码动态编译为一个程序集:

web service-webservice ,jersery框架服务调用问题,

问题描述 webservice ,jersery框架服务调用问题, 公司之前的外部接口都是soap协议的,通过wsdl文件生成客户端代码,客户端通过发请求到中间环节(暂且这样称),中间环节根据地址和接口名映射到外部接口,返回数据,但是现在新的接口是jersery框架,没有wsdl文件,调用方法也和之前的不同,现在不清楚怎么能把请求发到中间环节,再通过其查询外部接口获得数据, 关键项目不能直接连外部接口,必须通过中间才能调用外部接口,请教下,有没有什么方案,谢谢大家了, jersery接口是通过U

vs2012-WCF服务调用 SVCUtil.exe的使用问题

问题描述 WCF服务调用 SVCUtil.exe的使用问题 目前做一个项目,已经写好了一个WCF服务,并且已经成功发布到IIS上,现在想用一个C#窗体程序去调用,但是在用SvcUtil.exe生成客户端文件和配置文件时会有下图的情况只生成.cs文件,但是config文件没有生成,麻烦大神帮忙这是为什么?怎么解决?另外我的系统是win7,VS2012 解决方案 没看到你的指令,你是下面这种格式的吗? SvcUtil.exe /out:clientCode.cs /config:app.config

c++调jar-跨平台开发c++调用jar包

问题描述 跨平台开发c++调用jar包 大家好,目前正在做跨平台开发,需要用c++调第三方SDK(高德地图,jar包),请问有没有相关的知识或文档可供参考,如能告知,不胜感激!

18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景

============================================================================服务的生命周期: 一.采用start的方式开始服务 生命周期如下:            onStart()过时了 开启服务:onCreate()-àonStartCommand()-àonDestory(); 如果服务已经开启,不会重复的执行onCreate(),而是会调用onStartCommand(); 如果停止的时候onDestory()

ocket xception-android开发,调用webservice报错,求指导一下,感激不尽

问题描述 android开发,调用webservice报错,求指导一下,感激不尽 java.net.SocketException: sendto failed: ECONNRESET (Connection reset by peer) 解决方案 网络问题,检查下通讯,ip端口等等.

android-安卓开发关于调用系统自带的分享功能

问题描述 安卓开发关于调用系统自带的分享功能 刚刚做了个调用系统分享功能的事件,点击按钮,进入图库,选择图片时调用系统的分享功能,出现个问题,直接进入qq界面分享到QQ,微信,微博其他的都没出来,求解,下面是代码 //调用图库 public void Getpic(){ Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); intent.putExtra("crop&