技术标签: 1092278024:交流群-GO语言
@author:Davie版权所有:北京千锋互联科技有限公司
上节课我们使用Golang提供的核心net/rpc库实现了RPC调用编程。本节课继续来看一下RPC和之前所学的Protobuf在编程中的结合实现。
需求:假设在一个系统中,有订单模块(Order),其他模块想要实现RPC的远程工程调用,根据订单ID和时间戳可以获取订单信息。如果获取成功就返回相应的订单信息;如果查询不到返回失败信息。现在,我们来进行需求的编程实现。
在《Go语言微服务理论实践课程》中,学习过关于Protobuf的相关知识。可以利用Protobuf相关规则定义相应的数据格式,文件扩展名是.proto。
syntax = "proto3";
package message;
//订单请求参数
message OrderRequest {
string orderId = 1;
int64 timeStamp = 2;
}
//订单信息
message OrderInfo {
string OrderId = 1;
string OrderName = 2;
string OrderStatus = 3;
}
在上述文件中,定义了客户端发起RPC调用时的请求数据结构OrderRequest和服务端查询后返回的数据结构OrderInfo。数据定义采用proto3语法实现,整个数据定义被定义在message包下。
//订单服务
type OrderService struct {
}
func (os *OrderService) GetOrderInfo(request message.OrderRequest, response *message.OrderInfo) error {
//201907310003
orderMap := map[string]message.OrderInfo{
"201907300001": message.OrderInfo{OrderId: "201907300001", OrderName: "衣服", OrderStatus: "已付款"},
"201907310001": message.OrderInfo{OrderId: "201907310001", OrderName: "零食", OrderStatus: "已付款"},
"201907310002": message.OrderInfo{OrderId: "201907310002", OrderName: "食品", OrderStatus: "未付款"},
}
current := time.Now().Unix()
if (request.TimeStamp > current) {
*response = message.OrderInfo{OrderId: "0", OrderName: "", OrderStatus: "订单信息异常"}
} else {
result := orderMap[request.OrderId]//201907310003
if result.OrderId != "" {
*response = orderMap[request.OrderId]
} else {
return errors.New("server error")
}
}
return nil
}
在服务的方法定义中,使用orderMap模拟初始订单数据库,方便案例查询展示。GetOrderInfo方法有两个参数,第一个是message.OrderRequest,作为调用者传递的参数,第二个是message.OrderInfo,作为调用返回的参数,通过此处的两个参数,将上文通过.proto定义并自动生成的Go语言结构体数据结合起来。
func main() {
orderService := new(OrderService)
rpc.Register(orderService)
rpc.HandleHTTP()
listen, err := net.Listen("tcp", ":8081")
if err != nil {
panic(err.Error())
}
http.Serve(listen, nil)
}
client, err := rpc.DialHTTP("tcp", "localhost:8081")
if err != nil {
panic(err.Error())
}
timeStamp := time.Now().Unix()
request := message.OrderRequest{OrderId: "201907310001", TimeStamp: timeStamp}
var response *message.OrderInfo
err = client.Call("OrderService.GetOrderInfo", request, &response)
if err != nil {
panic(err.Error())
}
fmt.Println(*response)
分别依次运行server.go和client.go程序。运行结果如下:
文章浏览阅读107次。配置MavenIdea设置导包更改Idea背景颜色
文章浏览阅读2.5k次。GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。它在编写linux的时候自己制作了一个标准成为 GNU C标准。ANSI 美国国家标准协会,它对C做的标准ANSI C标准后来被国际标准协会接收成为标准C 所以 ANSI C 和标准C是一个概念总体来说现在linux也支持标准C,以后标准C可以跨平台,而GUN c 一般只在linux c下应用18.1 ANSI C和标准C++的_ansi c和c++的区别
文章浏览阅读143次。摘要: 阿里年会黑科技全揭秘:IoT手环、人脸识别验票、大屏弹幕互动等“十八般武艺”轮番上阵,2017上半年无监督特征学习研究成果汇总,CDN最全学习教程,量子计算会带来什么样的革命?更多精彩技术资讯,尽在云周刊!本期头条阿里年会黑科技全揭秘:IoT手环、人脸识别验票、大屏弹幕互动等“十八般武艺”轮番上阵 在刚刚结束的2017阿里巴巴年会上,各种科技元素的运用让年会增加了不少吸睛之..._ai手环年会
文章浏览阅读447次。首先需要有ntfs-3g,没有的话sudo apt-get install ntfs-3g挂载硬盘:chen@ilaptop:/$ sudo mount -o rw,remount /dev/sdb1报错:Remounting is not supported at present. You have to umount volume and then mount it once again.再挂..._remounting is not supported at present. you have to umount volume and then m
文章浏览阅读3.3k次。一、先说delphi7下,spcomm的安装。 安装完了,出现在system下,最后一个空间,蓝红黄; 二、delphi 2010下,控件的安装:先点击file->new->package-delphi 在右侧找到CONTAINS选项 右击出现菜单,选择AD_delphi spcomm安装
文章浏览阅读1.7k次,点赞5次,收藏12次。前言上面说的方式,其实在我的其他博客多多少少都提及过,或者单独写成篇,这里充其量是总结归纳,所以可能有些地方我会直接内部跳转文章链接,只因为篇幅太大,重新聚集到一篇文章上面,让你们看着也会很累,当然不会全部都是链接跳转的,一个一个来,先从下载开始Qt下载这边只介绍具体的下载地址,本文也直接让Qt5.x系列,其他版本不涉及,因为Qt目前的大版本是5.x系列,最新版本最近刚更新到5.15。Qt6 于2020年年底发布,预览版已经出了,我尝试用过,体验还是不太好,因为要更改的东西太多了,删除了很多库,尤其_qt离线安装
文章浏览阅读79次。其实,在OS X Tiger 10.4中,原来有两个应用程序一个叫NetInfo,一个是Directory Access一个主要用于管理本地用户的,另一个用来设置绑定网络Directory服务的,这次的Directory Utility是把这两个的功能合并了。 ...
文章浏览阅读7.1w次,点赞28次,收藏156次。pycharm如何配置python环境_pycharm配置python运行环境
文章浏览阅读1.7k次。WebP 是谷歌开发的一种新图片格式,它是支持有损和无损两种压缩方式的使用直接色的点阵图。使用 webp 格式的最大优点是是,在相同质量的文件下,它拥有更小的文件体积。因此它非常适合于网络图片的传输,因为图片体积的减少,意味着请求时间的减少,这样会提高用户的体验。这是谷歌开发的一种新的图片格式。浏览器如何判断是否支持 webp 格式图片?通过创建 Image 对象,将其 src 属性设置为 webp 格式的图片,然后在 onload 事件中获取图片的宽高,如果能够获取,则说明浏览器支持 webp_webp
文章浏览阅读2.2k次,点赞21次,收藏9次。SpringBoot2.X基础教程:配置文件详解_spring boot 2.x:配置文件详解
文章浏览阅读468次。阿里云服务器,安装web服务器(IIS)教程 间接目的:云服务器搭建ftp网站,进而实现文件的传输功能。 所以,需要了解IIS,并能够配置安装IIS —— “Web服务器”。IIS简介:IIS全称:Internet Information Services(IIS,互联网信息服务)。是指World Wide Web server服务,IIS是一种Web(网页)服..._iis配置。
文章浏览阅读1.3w次,点赞58次,收藏51次。XJTU_ 西安交通大学2020大学计算机作业-第十周XJTU_ 西安交通大学2020大学计算机作业-第十周注:所有题所有用例均已通过。俺又更新了,还是求点星星????文章没上传到github,反正没人点星星:https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7,如果这篇文章带给你了帮助或者灵感,欢迎给我点个星星,谢谢!!!第一题编写程序,将用户输入的最多5位八进制数转换为十进制。输入:一个整数。输出:一个整数。样例输入:_一个函数来判断一个正整数是否为回文数,若是则返回1,否则返回0。所谓回文数是