1.编译器protoc, 下载地址:https://github.com/protocolbuffers/protobuf/releases  (下载对应的版本, 解压后放到go的bin中)

2.安装golang扩展, go get -u github.com/golang/protobuf/protoc-gen-go

3.grpc库, git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/gprc

4.编写DIL文件

syntax = "proto3";

package helloworld;

// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
} // The request message containing the user's name.
message HelloRequest {
string name = 1;
} // The response message containing the greetings
message HelloReply {
string message = 1;
} 5.生成文件, 在IDL文件目录执行: protoc --go_out=plugins=grpc:. ./hello.proto
6.服务端代码:
package main

import (
"fmt"
"golang.org/x/net/context"
"google.golang.org/grpc"
"net"
pb "IDL文件生成的hello.pb.go"
) type service struct{} //声明一个结构体, 实现服务 func (s *service) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) { //服务逻辑, 出入参要和hello.pd.go中的方法一样
name := req.Name //请求结构体中的数据
fmt.Println("this is golang service, request...", name)
return &pb.HelloReply{
Message: "this is golang service", //返回数据
}, nil
} func main() {
lis, err := net.Listen("tcp", ":50001")
if err != nil {
panic(err)
} s := grpc.NewServer()
pb.RegisterGreeterServer(s, &service{}) //注册
_ = s.Serve(lis)
}

7.客户端代码

package main

import (
"fmt"
"golang.org/x/net/context"
"google.golang.org/grpc"
"hello.pb.go"
) func main() {
conn, err := grpc.Dial("localhost:50001", grpc.WithInsecure()) //连接
if err != nil {
fmt.Println(err)
}
defer conn.Close() hc := helloworld.NewGreeterClient(conn)
res, err := hc.SayHello(context.Background(), &helloworld.HelloRequest{
Name: "this is golang client request",
}) if err != nil {
fmt.Println(err)
} fmt.Println("this is golang client, response...", res.Message) } java与go的客户端和服务端代码都完成了, 并且可以跨语言调用

跨语言通信需要注意, IDL一定要一致, IDL中的package定义也一定要一致, 是grpc服务名的一部分
 
												

最新文章

  1. memset 的实现分析
  2. jquery刷新页面
  3. nginx 中 PHP 调用PEAR.php遇到的问题
  4. Java魔法堂:注释和注释模板
  5. &10 基本数据结构——栈,队列和链表
  6. Appium下Android keyevent整理
  7. 从基于idea的第一个javaweb项目到shell脚本项目自动发布(jdk1.8,mysql5.7,maven3.5,tomcat9,subversion,centos7.3)之一
  8. 201521123050 《Java程序设计》第11周学习总结
  9. PhpStorm服务激活
  10. 深入css布局篇(2) — 定位与浮动
  11. win 10 在vs2017下对mpi的安装以及认识
  12. Node 系列之path模块
  13. MVC 获取控制器名称和Action名称(转载)
  14. EF5.0区别于EF4.0的crud区别
  15. Linux LAMP架构搭建
  16. redis配置文件redis.conf翻译、解释以及常用注意事项(持续更新中...)
  17. JavaScript 中的原型(总则)
  18. unity, ugui button 禁止重复点击
  19. Netty处理TCP拆包、粘包
  20. mybatis入参方式和缓冲

热门文章

  1. 国产免费的visio替代品edraw mind map,用来话流程图够用了
  2. mtr和nmap命令
  3. Spring源码分析——调试环境搭建(可能是最省事的构建方法)
  4. 深入分析 JDK8 中 HashMap 的原理、实现和优化
  5. DFS系列 POJ(自认为的讲解)
  6. POJ1236【图的前连通(缩点)】
  7. Codeforces732E Sockets
  8. 【EXCEL终极总结分享】基于NPOI扩展封装的简易操作工具类库(简单灵活易用,支持导出、导入、上传等常见操作)
  9. Docker镜像文件操作
  10. $ybt\ 【信息学奥赛一本通】题解目录$