golang(gin框架),基于RESTFUL的跨语言远程通信尝试

背景:

在今年的项目实训过程中,遇到了这样的问题:

企业老师讲课实用的技术栈是Java springboot。

实训实际给我们讲课以外的开发时间非常短暂,为了方便协作、提高效率,我们想要将系统模块拆分成几个粒度比较大的分布式服务。然而同学合作开发之间用的语言栈不相同,让大家都学习类似gRPC的跨语言远程调用技术也不现实,于是便决定通过一个中心网关对各个模块发起http restful调用,实现模块服务的拆分。

简单尝试:

spring boot项目的一个注册接口:

/**
* springboot项目的一个注册接口通过param简单的传入userName和password两个值
* 进行简单的校验后完成注册。
* 示例:localhost:8080/register?userName=1233&password=123456
*/
@RestController //@Controller+ @ResponseBody
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/register")
public Result register(@RequestParam("userName") String userName,
@RequestParam("password") String password){
if(!StringUtils.hasText(userName)){
return Result.error(MallExceptionEnum.NEED_USERNAME);
}
if(!StringUtils.hasText(password)){
return Result.error(MallExceptionEnum.NEED_PASSWORD);
}
if(password.length()<6){
return Result.error(MallExceptionEnum.NEED_PASSWORD_LENGTH);
}
userService.register(userName,password);
return Result.success();
}
}

golang对Java项目的Restful调用:

package main

import (
"bytes"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"strings"
) func main() {
router := gin.Default()
gin.SetMode(gin.DebugMode)
//注册路由"/test",一个匿名实现方法完成对springboot的简单尝试调用
router.GET("/test", func(c *gin.Context) {
var body = strings.NewReader("请求的body在这个接口示例中无影响")
//对springboot项目的注册接口发送一个Post请求,返回一个response结构体
resp, err := http.Post("http://localhost:8080/register?userName=Mrxuexi&password=123456", "application/json; charset=utf-8", body)
//获取响应结构体resp的body部分(body是io.ReadCloser类型),将其转化为[]byte
reader := resp.Body
buf := new(bytes.Buffer)
buf.ReadFrom(reader) c.DataFromReader(http.StatusOK, contentLength, contentType, reader, extraHeaders)
fmt.Println("resp", resp)
fmt.Println("body", buf)
}) router.Run(":9090")
}

测试:

Postman对golang服务发起的请求:

Spring boot项目收到来自golang服务的请求,并进行了处理和响应:

Golang项目捕获到了响应:

数据库成功插入了一条信息:

golang(gin框架),基于RESTFUL的跨语言远程通信尝试的更多相关文章

  1. 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin

    原文链接 我是一名五六年经验的前端程序员,现在准备学习一下 Golang 的后端框架 gin. 以下是我的学习实战经验,记录下来,供大家参考. https://github.com/gin-gonic ...

  2. 基于Thrift的跨语言、高可用、高性能、轻量级的RPC框架

    功能介绍 跨语言通信 方便的使Java.Python.C++三种程序可以相互通信 负载均衡和容灾处理 方便的实现任务的分布式处理 支持服务的水平扩展,自动发现新的服务节点 能够兼容各种异常情况,如节点 ...

  3. golang gin框架中实现一个简单的不是特别精确的秒级限流器

    起因 看了两篇关于golang中限流器的帖子: Gin 开发实践:如何实现限流中间件 常用限流策略--漏桶与令牌桶介绍 我照着用,居然没效果-- 时间有限没有深究.这实在是一个很简单的功能,我的需求是 ...

  4. Golang gin框架学习

    今天开始学习gin框架,在Github上找的示例的go-gin-example, 进度 日期 进展 疑惑 进展 1.30 下拉代码,初步了解gin的介绍.搭建 .mod文件 module原理.使用方法 ...

  5. golang gin框架中实现大文件的流式上传

    一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理. 以下的代码实现了大文件流式 ...

  6. [Golang] Gin框架学习笔记

    0x0 Gin简介 1.Gin 是什么? Gin 是一个用 Go (Golang) 编写的 HTTP web 框架. 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httpr ...

  7. golang gin框架 使用swagger生成api文档

    github地址:https://github.com/swaggo/gin-swagger 1.下载swag $ go get -u github.com/swaggo/swag/cmd/swag ...

  8. golang gin框架中实现"Transfer-Encoding: chunked"方式的分块发送数据到浏览器端

    参考了这篇帖子: https://golangtc.com/t/570b403eb09ecc66b90002d9 golang web如何发送小包的chunked数据 以下是代码: r.GET(&qu ...

  9. golang gin框架设置静态目录

    router := gin.Default() 第一个参数是api 第二个静态问价的文件夹相对目录 router.StaticFS("/data", http.Dir(" ...

随机推荐

  1. Excel 数据验证:分类选择及输入限制

    几个简单设置让你的数据不再出错 如何快速选择某一大类中的细分小类 多级菜单 注意:引用可以创建二级目录,但是引用前应先用公式定义名称,然后引用,引用只能在本sheet操作.

  2. 2.8 GO 参数传递

    简单将GO中参数传递分为三类 数字.字符.字符串等类型 结构体 方法 GO的方法本身就是地址的入口,打印一个方法输出的是这个方法的地址 func test_func(){ //0x488a30 fmt ...

  3. 注解开发中的@Results注解使用

    package com.hope.dao;import com.hope.domain.User;import com.sun.xml.internal.bind.v2.model.core.ID;i ...

  4. 商城项目的购物车模块的实现------通过session实现

    1.新建购物车的实体类Cart public class Cart implements java.io.Serializable{ private Shangpin shangpin;//存放商品实 ...

  5. .Net Core MVC全局过滤器验证是否需要登录

    1.新增全局登录过滤器LoginCheckAttribute 1 public class LoginCheckAttribute: ActionFilterAttribute 2 { 3 publi ...

  6. 『学了就忘』Linux启动引导与修复 — 74、Linux系统的修复模式(光盘修复模式)

    目录 1.光盘修复模式概念 2.光盘修复模式修复系统问题 (1)准备系统光盘 (2)进入BIOS (3)修改BIOS的启动顺序 (4)进入光盘修复模式 (5)修复系统 (6)修复系统实操 (7)总结 ...

  7. gitlab配置免密拉取推送

    目录 一.简介 二.配置 一.简介 gitlab默认提供HTTP/SSH两种请求方式下载代码 测试用的gitlab账号 账号:abc 密码:123456 二.配置 1.生成秘钥,一路回车即可 cd ~ ...

  8. ios消息队列APNS实现和证书申请

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...

  9. 使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller

    本文作者:黄鑫鑫 - Nocalhost 项目核心开发者 腾讯云 CODING DevOps 研发工程师.硕士毕业于中山大学数据科学与计算机学院,曾负责过平安云主机及国家超算中心容器云平台等相关业务, ...

  10. manjaro(arch系)Linux使用(一)

    # manjaro的使用 ## 配置源 先切换国内的镜像源仓库 `sudo pacman-mirrors -i -c China -m rank` 在弹出的窗口中选择延迟最小的源 ### 添加arch ...