GO 微服务GO-Micro(8)-纯个人学习笔记记录:使用代码的方式调用我们的greeter微服务

微服务的调用

调用的代码来自大神:go-micro V2 从零开始(一)使用micro工具自动生成项目
上一期我们的把我们的服务注册到了我们的Consul中,怎么去使用客户端代码的形式去调用微服务呐?

package main


import (
    "context"
    "github.com/micro/go-micro/v2"
    "github.com/micro/go-micro/v2/client"
    pb "greeter/proto/greeter"
    "log"
)

func main() {
    // 这里以HelloService默认提供的Call接口调用为例示范服务的调用
    // 可以看到他的调用就像调用本地方法一样,go-micro为我们隐藏了背后的服务注册、发现、负载均衡以及网络操作
    testCallFunc()

    // 这里示范消息的发送
    testSendMessage()
}
func testCallFunc(){
    // 获取hello服务
    // 这里第一个参数"go.micro.service.hello"必须与hello-service注册信息一致
    // 一般由micro生成的项目默认服务名为:{namespace 默认[go.micro]}.{type 默认[service]}.{项目名}组成
    // 如果要修改默认值,在生成项目时可以这样: micro --namespace=XXX --type=YYYY ZZZZ
    // 当然也可以直接修改main.go中micro.Name("go.micro.service.hello")的内容
    helloService := pb.NewGreeterService("go.micro.service.greeter", client.DefaultClient)

    // 默认生成的hello服务中自带三个接口: Call() Stream() PingPong(),分别对应参数调用、流传输和心跳
    resp, err := helloService.Call(context.Background(), &pb.Request{
        Name: "xiao xie",
    })
    if err != nil {
        log.Panic("call func", err)
    }
    log.Println("call func success!", resp.Msg)
}

func testSendMessage(){
    // 消息主题,定义规则与服务一致
    // 同样,也可以修改main.go的micro.RegisterSubscriber("go.micro.service.hello", service.Server(), new(subscriber.Hello))
    const topic = "go.micro.service.greeter"
    // 获取消息发送接口,这里我一直使用的时micro.NewPublisher()
    // 但在写文时发现NewPublisher()已经被废止,改为NewEvent(),二者参数和返回值一致
    event := micro.NewEvent(topic, client.DefaultClient)
    if err := event.Publish(context.Background(), &pb.Message{
        Say: "hello server!",
    }); err != nil {
        log.Panic("send msg", err)
    }
    log.Println("send msg success!")
}

注意点我们的客户端是放在微服务的目录下:


image.png

结果悲剧了:

D:\code\go\Mi_Onse\greeter>go run greeter_cli.go
2021-01-20 17:22:20.086552 I | call func{"id":"go.micro.client","code":500,"detail":"service go.micro.service.greeter: not found","status":"Internal Server Error"}
panic: call func{"id":"go.micro.client","code":500,"detail":"service go.micro.service.greeter: not found","status":"Internal Server Error"}

goroutine 1 [running]:
log.Panic(0xc0004b1f48, 0x2, 0x2)
        D:/go1.14/go1.14.13/src/log/log.go:351 +0xb3
main.testCallFunc()
        D:/code/go/Mi_Onse/greeter/greeter_cli.go:33 +0x18a
main.main()
        D:/code/go/Mi_Onse/greeter/greeter_cli.go:15 +0x27
exit status 2

D:\code\go\Mi_Onse\greeter>

原因是我们的客户端调用的时候应该是需要去我们的Consul查询我们的服务,所以它找不到了!!!
这个地方也是找不到注册到consul的的服务:

D:\code\go\Mi_Onse>micro list services

D:\code\go\Mi_Onse>

我们切换我们的微服务注册到默认的MDNS
切换后,查看服务:

D:\code\go\Mi_Onse>micro list services
go.micro.service.greeter
micro.http.broker
  • 从consul查看服务列表--方式1:

–registry_address=127.0.0.1:8500 用来指定服务发现的地址, 就是上面的 consul 的地址, consul 默认端口是 8500

这地方也不行?暂时不知道!!!备注一下 也获取不到!!!
D:\code\go\Mi_Onse>micro --registry_address=127.0.0.1:8500 list services

D:\code\go\Mi_Onse>
  • 从consul查看服务列表--方式2:
这地方也不行?暂时不知道!!!备注一下 也获取不到!!!
D:\code\go\Mi_Onse>micro --registry consul --registry_address loaclhost:8500 list services
Registry consul not found

D:\code\go\Mi_Onse>

先切换回 使用默认的MDSN 启动微服务方式:

再调用我们的客户端代码:

D:\code\go\Mi_Onse\greeter>go run greeter_cli.go
2021-01-20 17:30:43.456834 I | call func success! Hello xiao xie
2021-01-20 17:30:43.558562 I | send msg success!

D:\code\go\Mi_Onse\greeter>

补充 :其他命令学习

1 查看服务详情:

命令:

D:\code\go\Mi_Onse>micro get service go.micro.service.greeter

结果:

D:\code\go\Mi_Onse>micro get service go.micro.service.greeter
service  go.micro.service.greeter

version latest

ID      Address Metadata
go.micro.service.greeter-c344efa6-8a4f-4674-9fe1-f1679e667233   192.168.1.213:52927     broker=http,protocol=grpc,registry=mdns,server=grpc,transport=grpc

Endpoint: Greeter.Call

Request: {
        message_state MessageState {
                no_unkeyed_literals NoUnkeyedLiterals
                do_not_compare DoNotCompare
                do_not_copy DoNotCopy
                message_info MessageInfo
        }
        int32 int32
        unknown_fields []uint8
        name string
}

Response: {
        message_state MessageState {
                no_unkeyed_literals NoUnkeyedLiterals
                do_not_compare DoNotCompare
                do_not_copy DoNotCopy
                message_info MessageInfo
        }
        int32 int32
        unknown_fields []uint8
        msg string
}


Endpoint: Greeter.PingPong

Metadata: stream=true

Request: {}

Response: {}


Endpoint: Greeter.Stream

Metadata: stream=true

Request: {}

Response: {}


Endpoint: Greeter.Handle

Metadata: subscriber=true,topic=go.micro.service.greeter

Request: {
        message_state MessageState {
                no_unkeyed_literals NoUnkeyedLiterals
                do_not_compare DoNotCompare
                do_not_copy DoNotCopy
                message_info MessageInfo
        }
        int32 int32
        unknown_fields []uint8
        say string
}

Response: {}

2 尝试调用服务:

  • 估计这个是v1版本的形式:

D:\code\go\Mi_Onse>micro query go.micro.service.greeter greeter.call
无效参数
QUERY { PROCESS | SESSION | TERMSERVER | USER }
exit status 1
  • V2版本的相识(当我们的把微服务注册到Consul的时候是找不到服务的)
D:\code\go\Mi_Onse>micro call go.micro.service.greeter greeter.call
error calling go.micro.service.greeter.greeter.call: {"id":"go.micro.client","code":500,"detail":"service go.micro.service.greeter: not found","status":"Internal Server Error"}

D:\code\go\Mi_Onse>

切换回默认注册到MDNS的之后【区分大小写:】

大写:
D:\code\go\Mi_Onse>micro call go.micro.service.greeter Greeter.Call
{
        "msg": "Hello "
}
小写:
D:\code\go\Mi_Onse>micro call go.micro.service.greeter greeter.call
error calling go.micro.service.greeter.greeter.call: {"id":"go.micro.client","code":500,"detail":"unknown service greeter","status":"Internal Server Error"}

使用Mirco修改默认注册中心:

D:\code\go\Mi_Onse>set MICRO_REGISRY consul
MICRO_REGISRY=consul

D:\code\go\Mi_Onse>set MIRCO_REGISTRY_ADDRESS 127.0.0.1:8500
环境变量 MIRCO_REGISTRY_ADDRESS 127.0.0.1:8500 没有定义

D:\code\go\Mi_Onse>

cli命令:


D:\code\go\Mi_Onse>micro cli
micro> list
go.micro.service.greeter
micro.http.broker
micro> help
Commands:
         call                    Call a service
         deregister              Deregister a service
         exit                    Exit the CLI
         get                     Get service info
         health                  Get service health
         help                    CLI usage
         list                    List services, peers or routes
         publish                 Publish a message to a topic
         quit                    Exit the CLI
         register                Register a service
         stats                   Get service stats
         stream                  Stream a call to a service

micro>

尝试修改我们的mirco 默认的注册中心

D:\code\go\Mi_Onse>micro --registry consul --registry_address loaclhost:8500 list services
Registry consul not found

D:\code\go\Mi_Onse>micro --registry consul --registry_address loaclhost:8500 list services
Registry consul not found

D:\code\go\Mi_Onse>

V2 micro --help 命令大全:

D:\code\go\Mi_Onse>micro --help
NAME:
   micro - A microservice runtime

   Use `micro [command] --help` to see command specific help.

USAGE:
   micro [global options] command [command options] [arguments...]

VERSION:
   latest

COMMANDS:
   server      Run the micro server
   new         Create a service template
   env         Get/set micro cli environment
   login       Login using a token
   run         Run a service: micro run [source]
   logs        Get logs for a service
   call        Call a service e.g micro call greeter Say.Hello '{"name": "John"}
   update      Update a service: micro update [source]
   kill        Kill a service: micro kill [source]
   store       Run the micro store service
   config      Manage configuration values
   auth        Manage authentication related resources
   status      List runtime objects
   stream      Create a service stream
   file        Move files between your local machine and the server
   list        List items in registry or network
   cli         Run the interactive CLI
   publish     Publish a message to a topic
   stats       Query the stats of a service
   bot         Run the chatops bot
   whoami      Account information
   api         Run the api gateway
   register    Register an item in the registry
   deregister  Deregister an item in the registry
   get         Get item from registry
   broker      Run the message broker
   health      Check the health of a service
   proxy       Run the service proxy
   router      Run the micro network router
   tunnel      Run the micro network tunnel
   network     Run the micro network node
   registry    Run the service registry
   debug       Run the micro debug service
   trace       Get tracing info from a service
   runtime     Run the micro runtime
   service     Run a micro service
   plugin      Plugin commands
   web         Run the web dashboard
   init        Run the micro operator
   help, h     Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --client value                       Client for go-micro; rpc [%MICRO_CLIENT%]
   --client_request_timeout value       Sets the client request timeout. e.g 500ms, 5s, 1m. Default: 5s [%MICRO_CLIENT_REQUEST_TIMEOUT%]
   --client_retries value               Sets the client retries. Default: 1 (default: 1) [%MICRO_CLIENT_RETRIES%]
   --client_pool_size value             Sets the client connection pool size. Default: 1 (default: 0) [%MICRO_CLIENT_POOL_SIZE%]
   --client_pool_ttl value              Sets the client connection pool ttl. e.g 500ms, 5s, 1m. Default: 1m [%MICRO_CLIENT_POOL_TTL%]
   --register_ttl value                 Register TTL in seconds (default: 60) [%MICRO_REGISTER_TTL%]
   --register_interval value            Register interval in seconds (default: 30) [%MICRO_REGISTER_INTERVAL%]
   --server value                       Server for go-micro; rpc [%MICRO_SERVER%]
   --server_name value                  Name of the server. go.micro.srv.example [%MICRO_SERVER_NAME%]
   --server_version value               Version of the server. 1.1.0 [%MICRO_SERVER_VERSION%]
   --server_id value                    Id of the server. Auto-generated if not specified [%MICRO_SERVER_ID%]
   --server_address value               Bind address for the server. 127.0.0.1:8080 [%MICRO_SERVER_ADDRESS%]
   --server_advertise value             Used instead of the server_address when registering with discovery. 127.0.0.1:8080 [%MICRO_SERVER_ADVERTISE%]
   --server_metadata value              A list of key-value pairs defining metadata. version=1.0.0 [%MICRO_SERVER_METADATA%]
   --broker value                       Broker for pub/sub. http, nats, rabbitmq [%MICRO_BROKER%]
   --broker_address value               Comma-separated list of broker addresses [%MICRO_BROKER_ADDRESS%]
   --profile value                      Debug profiler for cpu and memory stats [%MICRO_DEBUG_PROFILE%]
   --registry value                     Registry for discovery. etcd, mdns [%MICRO_REGISTRY%]
   --registry_address value             Comma-separated list of registry addresses [%MICRO_REGISTRY_ADDRESS%]
   --runtime value                      Runtime for building and running services e.g local, kubernetes (default: "local") [%MICRO_RUNTIME%]
   --runtime_source value               Runtime source for building and running services e.g github.com/micro/service (default: "github.com/micro/services") [%MICRO_RUNTIME_SOURCE%]
   --selector value                     Selector used to pick nodes for querying [%MICRO_SELECTOR%]
   --store value                        Store used for key-value storage [%MICRO_STORE%]
   --store_address value                Comma-separated list of store addresses [%MICRO_STORE_ADDRESS%]
   --store_database value               Database option for the underlying store [%MICRO_STORE_DATABASE%]
   --store_table value                  Table option for the underlying store [%MICRO_STORE_TABLE%]
   --transport value                    Transport mechanism used; http [%MICRO_TRANSPORT%]
   --transport_address value            Comma-separated list of transport addresses [%MICRO_TRANSPORT_ADDRESS%]
   --tracer value                       Tracer for distributed tracing, e.g. memory, jaeger [%MICRO_TRACER%]
   --tracer_address value               Comma-separated list of tracer addresses [%MICRO_TRACER_ADDRESS%]
   --auth value                         Auth for role based access control, e.g. service [%MICRO_AUTH%]
   --auth_id value                      Account ID used for client authentication [%MICRO_AUTH_ID%]
   --auth_secret value                  Account secret used for client authentication [%MICRO_AUTH_SECRET%]
   --auth_namespace value               Namespace for the services auth account (default: "go.micro") [%MICRO_AUTH_NAMESPACE%]
   --auth_public_key value              Public key for JWT auth (base64 encoded PEM) [%MICRO_AUTH_PUBLIC_KEY%]
   --auth_private_key value             Private key for JWT auth (base64 encoded PEM) [%MICRO_AUTH_PRIVATE_KEY%]
   --auth_provider value                Auth provider used to login user [%MICRO_AUTH_PROVIDER%]
   --auth_provider_client_id value      The client id to be used for oauth [%MICRO_AUTH_PROVIDER_CLIENT_ID%]
   --auth_provider_client_secret value  The client secret to be used for oauth [%MICRO_AUTH_PROVIDER_CLIENT_SECRET%]
   --auth_provider_endpoint value       The enpoint to be used for oauth [%MICRO_AUTH_PROVIDER_ENDPOINT%]
   --auth_provider_redirect value       The redirect to be used for oauth [%MICRO_AUTH_PROVIDER_REDIRECT%]
   --auth_provider_scope value          The scope to be used for oauth [%MICRO_AUTH_PROVIDER_SCOPE%]
   --config value                       The source of the config to be used to get configuration [%MICRO_CONFIG%]
   --local                              Enable local only development: Defaults to true. (default: false)
   --enable_acme                        Enables ACME support via Let's Encrypt. ACME hosts should also be specified. (default: false) [%MICRO_ENABLE_ACME%]
   --acme_hosts value                   Comma separated list of hostnames to manage ACME certs for [%MICRO_ACME_HOSTS%]
   --acme_provider value                The provider that will be used to communicate with Let's Encrypt. Valid options: autocert, certmagic [%MICRO_ACME_PROVIDER%]
   --enable_tls                         Enable TLS support. Expects cert and key file to be specified (default: false) [%MICRO_ENABLE_TLS%]
   --tls_cert_file value                Path to the TLS Certificate file [%MICRO_TLS_CERT_FILE%]
   --tls_key_file value                 Path to the TLS Key file [%MICRO_TLS_KEY_FILE%]
   --tls_client_ca_file value           Path to the TLS CA file to verify clients against [%MICRO_TLS_CLIENT_CA_FILE%]
   --api_address value                  Set the api address e.g 0.0.0.0:8080 [%MICRO_API_ADDRESS%]
   --namespace value                    Set the micro service namespace (default: "micro") [%MICRO_NAMESPACE%]
   --proxy_address value                Proxy requests via the HTTP address specified [%MICRO_PROXY_ADDRESS%]
   --web_address value                  Set the web UI address e.g 0.0.0.0:8082 [%MICRO_WEB_ADDRESS%]
   --network value                      Set the micro network name: local, go.micro [%MICRO_NETWORK%]
   --network_address value              Set the micro network address e.g. :9093 [%MICRO_NETWORK_ADDRESS%]
   --router_address value               Set the micro router address e.g. :8084 [%MICRO_ROUTER_ADDRESS%]
   --gateway_address value              Set the micro default gateway address e.g. :9094 [%MICRO_GATEWAY_ADDRESS%]
   --tunnel_address value               Set the micro tunnel address e.g. :8083 [%MICRO_TUNNEL_ADDRESS%]
   --api_handler value                  Specify the request handler to be used for mapping HTTP requests to services; {api, proxy, rpc} [%MICRO_API_HANDLER%]
   --api_namespace value                Set the namespace used by the API e.g. com.example.api [%MICRO_API_NAMESPACE%]
   --web_namespace value                Set the namespace used by the Web proxy e.g. com.example.web [%MICRO_WEB_NAMESPACE%]
   --web_url value                      Set the host used for the web dashboard e.g web.example.com [%MICRO_WEB_HOST%]
   --enable_stats                       Enable stats (default: false) [%MICRO_ENABLE_STATS%]
   --auto_update                        Enable automatic updates (default: false) [%MICRO_AUTO_UPDATE%]
   --update_url value                   Set the url to retrieve system updates from (default: "https://go.micro.mu/update") [%MICRO_UPDATE_URL%]
   --report_usage                       Report usage statistics (default: true) [%MICRO_REPORT_USAGE%]
   --env value, -e value                Override environment [%MICRO_ENV%]
   --plugin value                       Comma separated list of plugins e.g broker/rabbitmq, registry/etcd, micro/basic_auth, /path/to/plugin.so [%MICRO_PLUGIN%]
   --help, -h                           show help (default: false)
   --version                            print the version (default: false)

D:\code\go\Mi_Onse>

区别:

D:\code\go\Mi_Onse\greeter>micro register consulsdasda

D:\code\go\Mi_Onse\greeter>micro register consulsdasdaasdasd

D:\code\go\Mi_Onse>micro --registry consul --registry_address loaclhost:8500 list services
Registry consul not found
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容