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

简介: 1,关于consuldubbo的注册中心是zookeeper,redis。 motan的注册中心是zookeeper,consul。 kubernetes的注册中心是 etcd。 使用consul的好处是服务发现啥的都支持了。 可以使用域名进行负载均衡。 也是一个不错的 Server-Side Discovery Pattern 。2,启动consul

1,关于consul


dubbo的注册中心是zookeeper,redis。
motan的注册中心是zookeeper,consul。
kubernetes的注册中心是 etcd。
使用consul的好处是服务发现啥的都支持了。
可以使用域名进行负载均衡。
也是一个不错的 Server-Side Discovery Pattern 。

2,启动consul服务,调用接口


首先要在服务器安装一个consul服务:
http://blog.csdn.net/freewebsys/article/details/56296013
然后下载go的客户端。
go get github.com/hashicorp/consul
然后就可以使用 consul api服务了。

package src

import (
    "fmt"
    consulapi "github.com/hashicorp/consul/api"
    "log"
    "testing"
)

const Id = "1234567890"

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
    registration.Name = "user-tomcat"
    registration.Port = 8080
    registration.Tags = []string{"user-tomcat"}
    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 check.HTTP:",check)

    err = client.Agent().ServiceRegister(registration)



    if err != nil {
        log.Fatal("register server error : ", err)
    }

}

func TestDregister(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)
    }

    err = client.Agent().ServiceDeregister(Id)
    if err != nil {
        log.Fatal("register server error : ", err)
    }


}

代码很简单,创建了一个consul的服务,说明tomcat的服务端口,ip。并且声明了一个check方法用来检查服务是否可用。

可以通过ui界面观察服务注册情况:

服务可用。

check失败服务不可用。

3,使用dig命令检查服务


yum install bind-utils

在服务器上面直接查看user-tomcat 服务情况:

# dig @10.0.2.15 -p 8600 user-tomcat.service.consul SRV

; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> @10.0.2.15 -p 8600 user-tomcat.service.consul SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17543
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;user-tomcat.service.consul.    IN      SRV

;; ANSWER SECTION:
user-tomcat.service.consul. 0   IN      SRV     1 1 8080 consul-dev.node.dc1.consul.

;; ADDITIONAL SECTION:
consul-dev.node.dc1.consul. 0   IN      A       127.0.0.1

;; Query time: 0 msec
;; SERVER: 10.0.2.15#8600(10.0.2.15)
;; WHEN: Sun Mar 05 03:06:06 EST 2017
;; MSG SIZE  rcvd: 100

consul-dev.node.dc1.consul. 0 IN A 127.0.0.1
可以查询到一个域名节点。

4,总结


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

总体上感觉 consul 还是非常简单实用的。
在做 Server-side Discovery 的时候是非常的方便的。
可以降低client的代码逻辑。

目录
相关文章
|
4月前
|
Arthas 监控 Java
Arthas 可以用于监控和诊断在 Windows 系统下部署的 Tomcat 服务
Arthas 可以用于监控和诊断在 Windows 系统下部署的 Tomcat 服务
245 2
|
3天前
|
JSON Go 数据格式
golang学习7,glang的web的restful接口结构体传参
golang学习7,glang的web的restful接口结构体传参
|
3天前
|
JSON Go 数据格式
golang学习6,glang的web的restful接口传参
golang学习6,glang的web的restful接口传参
|
3天前
|
JSON Go 数据格式
golang学习5,glang的web的restful接口
golang学习5,glang的web的restful接口
|
3天前
|
Go
golang学习4,glang的web接口
golang学习4,glang的web接口
|
4天前
|
应用服务中间件
jeecgboot开发环境服务启动刷新没问题,部署到tomcat,F5刷新或者浏览器刷新,会出现404
jeecgboot开发环境服务启动刷新没问题,部署到tomcat,F5刷新或者浏览器刷新,会出现404
|
15天前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之在DataWorks数据服务中,生成API和注册API的主要区别如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
25 2
|
19天前
|
安全 Go
Golang深入浅出之-接口(Interfaces)详解:抽象、实现与空接口
【4月更文挑战第22天】Go语言接口提供抽象能力,允许类型在不暴露实现细节的情况下遵循行为约定。接口定义了一组方法签名,类型实现这些方法即实现接口,无需显式声明。接口实现是隐式的,通过确保类型具有接口所需方法来实现。空接口`interface{}`接受所有类型,常用于处理任意类型值。然而,滥用空接口可能丧失类型安全性。理解接口、隐式实现和空接口的使用能帮助编写更健壮的代码。正确使用避免方法,如确保方法签名匹配、检查接口实现和谨慎处理空接口,是关键。
21 1
|
5月前
|
应用服务中间件
今日分享记录:WIN10中如何将tomcat注册到Server服务中
今日分享记录:WIN10中如何将tomcat注册到Server服务中
61 1
|
2月前
|
缓存 中间件 API