安装protobuf

在windows下,直接下载release版本
https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0
然后把bin目录加入到环境变量中
如果是在Linux下,下载对应的版本,然后编译,把编译后的文件加入env中

安装go protobuf plugin

可以参考这里: https://studygolang.com/articles/11343

go get -u github.com/golang/protobuf/protoc-gen-go

编写HelloWorld

用官方的例子: https://github.com/grpc/grpc-go/tree/master/examples/helloworld

目录结构如下:

建立一个grpc-helloworld的目录,然后运行命令: go mod init grpc-helloworld,我们用go mod来管理包。
然后按上图建立相同的文件夹

编写proto文件

编写proto,名字为helloworld/hellowporld.proto

proto的语法:

参考:https://segmentfault.com/a/1190000007917576

官方:https://developers.google.com/protocol-buffers/docs/gotutorial

syntax = "proto3";

option java_multiple_files = true;
option java_outer_classname = "HelloWorldProto"; package helloworld; service Greet {
rpc SayHello (HelloRequest) returns (HelloReply) {}
} message HelloReply {
string message = 1;
} message HelloRequest {
string name = 1;
}

编译proto文件

直接进入 helloworld.proto 所在的文件夹,运行命令

 protoc -I . --go_out=plugins=grpc:. ./helloworld.proto

然后在helloworld.proto同级目录生成了一个 helloworld.pb.go 的文件

编写服务端代码

package main

import (
"context"
pb "grpc-helloworld/helloworld"
"log"
"net" "google.golang.org/grpc"
"google.golang.org/grpc/reflection"
) const (
port = ":8080"
) type server struct{} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello" + in.Name}, nil
} func main() {
//指定执行程序监听的端口
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
} //建立 gPRC 服务器,并注册服务
s := grpc.NewServer()
pb.RegisterGreetServer(s, &server{}) log.Println("Server run ...")
//启动服务
if err := s.Serve(lis); err != nil {
log.Fatalf("fail to serve: %v", err)
}
}

编写客户端代码

package main

import (
"context"
pb "grpc-helloworld/helloworld"
"log"
"os"
"time" "google.golang.org/grpc"
) const (
address = "localhost:8080"
defaultName = "world"
) func main() {
//连接到gRPC服务端
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close() //建立客户端
c := pb.NewGreetClient(conn) name := defaultName
if len(os.Args) > 1 {
name = os.Args[1]
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel() // 调用方法
r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})
if err != nil {
log.Fatalf("couldn not greet: %v", err)
}
log.Printf("Greeting: %s", r.Message)
}

测试运行

1、 打开一个shell,进入 greeter_server 目录,运行  go run main.go

$ go run main.go
2019/07/14 01:35:36 Server run ...

2、在开另外一个shell,进入greeter_client 目录,运行 go run main.go

$ go run main.go
2019/07/14 01:36:10 Greeting: Helloworld

输出了 Helloworld 说明程序运行成功了

Golang gRPC微服务02: helloworld的更多相关文章

  1. Golang gRPC微服务01: 介绍

    gRPC 是什么 gRPC是goole开源的一个RPC框架和库,支持多语言之间的通信.底层通信采用的是 HTTP2 协议.gRPC在设计上使用了 ProtoBuf 这种接口描述语言.这种IDL语言可以 ...

  2. Grpc微服务从零入门

    快速入门 安装 JDK 毫无疑问,要想玩Java,就必须得先装Java JDK,目前公司主要使用的是Oracle JDK 8,安装完成后要配置环境才能正常使用,真蠢,不过也就那么一下下,认了吧.配置方 ...

  3. 经济学人使用Golang构建微服务历程回顾

    关键点 经济学人内容分发系统需要更大的灵活性,将内容传递给日益多样化的数字渠道.为了实现这一灵活性目标并保持高水平的性能和可靠性,平台从一个单体结构过渡到微服务体系结构. 用Go编写的服务是新系统的一 ...

  4. traefik+etcd构建grpc微服务demo

    1.下载安装traefik https://github.com/containous/traefik/releases 2.下载安装etcd3 https://github.com/coreos/e ...

  5. SpringCloud微服务(02):Ribbon和Feign组件,实现服务调用的负载均衡

    本文源码:GitHub·点这里 || GitEE·点这里 一.Ribbon简介 1.基本概念 Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TC ...

  6. python grpc 微服务

    https://realpython.com/python-microservices-grpc/ https://www.manning.com/books/developing-microserv ...

  7. 基于Golang设计一套微服务架构[转]

      article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...

  8. golang微服务框架go-micro 入门笔记1.搭建 go-micro环境

    微服务的本质是让专业的人做专业的事情,做出更好的东西. golang具备高并发,静态编译等特性,在性能.安全等方面具备非常大的优势.go-micro是基于golang的微服务编程框架,go-micro ...

  9. 清晰架构(Clean Architecture)的Go微服务: 程序结构

    我使用Go和gRPC创建了一个微服务,并试图找出最佳的程序结构,它可以用作我未来程序的模板. 我有Java背景,并发现自己在Java和Go之间挣扎,它们之间的编程理念完全不同.我写了一系列关于在项目工 ...

随机推荐

  1. windows系统下node-gyp的配置使用

    1.安装python和vs2017 安装python要将python命令配置到系统变量path 也可以通过npm i -g windows-build-tools来安装 2.查看和设置npm conf ...

  2. hdu 5572 An Easy Physics Problem 圆+直线

    An Easy Physics Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  3. 11.17 模拟赛&&day-2

    /* 后天就要复赛了啊啊啊啊啊. 可能是因为我是一个比较念旧的人吧. 讲真 还真是有点不舍. 转眼间一年的时间就过去了. 2015.12-2016.11. OI的一年. NOIP gryz RP++. ...

  4. 【csp模拟赛2】 爆搜 方格加数

    [题目描述] xyz1048576正在玩一个关于矩阵的游戏. 一个n*m的矩阵,矩阵中每个数都是[1,12]内的整数.你可以执行下列两个操作任意多次: (1)指定一行,将该行所有数字+1. (2)指定 ...

  5. jQuery的入口函数

    原生的JS的入口函数指的是:window.onload = function(){}: 如下所示: //原生js的入口函数.页面上所有内容加载完毕, 才执行.//不仅要等文本加载完毕, 而且要等图片也 ...

  6. Django-内置的auth模块

    一.auth认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个 ...

  7. Vue_(Router路由)-vue-router路由的基本用法

    vue-router官网:传送门 vue-router起步:传送门 vue-router路由:Vue.js官网推出的路由管理器,方便的构建单页应用 单页应用:Single Page Applicati ...

  8. 事件处理机制与Handler消息传递机制

    一.基于监听的事件处理机制 基于监听的时间处理机制模型: 事件监听机制中由事件源,事件,事件监听器三类对象组成 处理流程如下: Step 1:为某个事件源(组件)设置一个监听器,用于监听用户操作 St ...

  9. springMVC课程笔记(一)springMVC架构原理分析

    一.springMVC架构原理分析 1.先搞清楚什么是springMVC: 其实springMVC是spring框架中的一个模块,springMVC和spring无需通过中间整合层整合,SpringM ...

  10. Alpha冲刺(6/6)

    队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 协调了一下组内的工作 复习了一下SuffixAutomata 接下来的计划 实现更多的功能 ...