当前位置: 首页 > article >正文

1. 初识golang微服务-gRPC

单体架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

微服务架构

在这里插入图片描述

RPC架构(远程过程调用)

在这里插入图片描述
服务端实例代码:

package mainimport ("fmt""net""net/rpc""time"
)type Hello struct {
}func (h Hello) SayHello(req string, res *string) error {*res = "你好," + reqfmt.Println(*res)time.Sleep(10*time.Second)return nil
}func main() {// 1. 注册RPC服务err := rpc.RegisterName("hello", new(Hello))if err!=nil{fmt.Println(err)}// 2. 监听端口listener, err := net.Listen("tcp", "127.0.0.1:8000")if err!=nil{fmt.Println(err)}// 3. 退出程序是关闭监听defer listener.Close()for{// 4. 建立连接conn, err := listener.Accept()if err!=nil{fmt.Println(err)}// 绑定服务go rpc.ServeConn(conn)}}

客户端示例代码:

package mainimport ("fmt""net/rpc"
)func main() {// 1. 与RPC微服务建立连接conn, err := rpc.Dial("tcp", "127.0.0.1:8000")if err!=nil{fmt.Println(err)}// 2. 当程序退出时关闭连接defer conn.Close()// 3. 远程调用函数var res stringerr = conn.Call("hello.SayHello", "hahahha", &res)fmt.Println(res)
}

在这里插入图片描述

Protobuf

在这里插入图片描述

在这里插入图片描述
https://github.com/protocolbuffers/protobuf/releases/tag/v30.0
下载对应操作系统版本,然后解压缩,将bin文件夹的路径加入环境变量中
在这里插入图片描述
即为成功!
然后下载go对应的包
go get github.com/golang/protobuf/protoc-gen-go

使用样例

syntax = "proto3";
option go_package="./";message User{string name = 1;bool male = 2;repeated string hobby = 3;
}// 执行:protoc --go_out=. *.proto
package mainimport ("fmt""google.golang.org/protobuf/proto"
)func main() {u := User{Name: "张三",Male: false,}data, _ := proto.Marshal(&u)fmt.Println(data)user := &User{}proto.Unmarshal(data, user)fmt.Println(user)
}

message嵌套

message SearchResponse {message Result {string url = 1;string title = 2;repeated string snippets = 3;}repeated Result results = 1;
}

定义服务类型

service SearchService {rpc Search (SearchRequest) returns (SearchResponse);
}

相关文章:

1. 初识golang微服务-gRPC

单体架构 在这里插入图片描述 微服务架构 RPC架构(远程过程调用) 服务端实例代码: package mainimport ("fmt""net""net/rpc""time" )type Hello struct { }func (h Hello) SayHello(req stri…...

C++20 指定初始化器

指定初始化器 对于聚合,C20 提供了一种方法来指定应该用传递的初始值初始化哪个成员,但只能使用它 来跳过参数。 假设有以下聚合类型: struct Value {double amount{0};int precision{2};std::string unit{"Dollar";}; }; 那么&#x…...

【从零开始学习计算机科学】设计模式(二)工厂模式、抽象工厂模式、单例模式、建造者模型、原型模式

【从零开始学习计算机科学】设计模式(二)工厂模式、抽象工厂模式、单例模式、建造者模型、原型模式 工厂模式主要特点类型适用场景抽象工厂模式主要特点工作原理适用场景举例优点缺点总结单例模式主要特点工作原理适用场景优点缺点总结建造者模式主要特点工作原理适用场景优点…...

视频翻译器免费哪个好?轻松玩转视频直播翻译

你是不是觉得看外语视频很麻烦?每次遇到喜欢的外语电影、电视剧或动漫,总是要等字幕组的翻译,或者因为语言不通而错过精彩的情节。 这个时候,掌握多语种直播翻译方案就显得尤为重要,有了实时字幕,看外语视…...

mysql 数据库异常排查

1、简单查询语句无法执行 线上问题记录,有个删除语句走不了索引导致锁表,其他所有引用该表的操作需要等待删除成功后才能执行,导致服务不可用 排查思路,先看是否有长时间未提交的事务 SELECT * FROM information_schema.INNOD…...

Python列表1

# coding:utf-8 print("———————————— 列表 ——————————————")列表 是指一系列按照特定顺序排列的元素组成 是Python中内置的可变序列 使用[]定义列表,元素与元素之间使用英文的逗号分隔 列表中的元素可以是任意的数据类型列表的…...

如何在前端发版时实现向客户端推送版本更新消息

前端打包发版后如何用户一个更新提示,该提示会让用户主动去更新当前正在操作的页面,或者在系统有较大更新时,让用户重新更新本地缓存信息,这一操作比较友好,且能避免用户不更新当前系统,导致某些接口依赖更新后的数据而导致接口请求失败报错。 1、后端更新提示 有些情况…...

Redis系列:深入理解缓存穿透、缓存击穿、缓存雪崩及其解决方案

在使用Redis作为缓存系统时,我们经常会遇到“缓存穿透”、“缓存击穿”和“缓存雪崩”等问题,这些问题一旦出现,会严重影响应用性能甚至造成服务不可用。因此,理解这些问题的产生原因和解决方案非常重要。 本文将全面讲解缓存穿透…...

3.19学习总结

学习了Java中的面向对象的知识点 完成一道算法题,找树左下角的值,错误的以为左下角只能是最底层的左节点,但指的是最底层最左边的节点...

服务创造未来 东隆科技携多款产品亮相慕尼黑

慕尼黑上海光博会依托于德国慕尼黑博览集团,自2006年首次举办以来,始终坚持将国内外先进的光电技术成果展示给观众,深度链接亚洲乃至全球的激光、光学、光电行业的优质企业及买家。如今已经成为了国内外专业观众信赖的亚洲激光、光学、光电行…...

AI 时代,学习 Java 应如何入手?

一、Java 的现状:生态繁荣与 AI 融合的双重机遇 在 2025 年的技术版图中,Java 依然稳坐企业级开发的 “头把交椅”。根据行业统计,Java 在全球企业级应用中的市场份额仍超过 65%,尤其在微服务架构、大数据平台和物联网&#xff0…...

LiteratureReading:[2016] Enriching Word Vectors with Subword Information

文章目录 一、文献简明(zero)二、快速预览(first)1、标题分析2、作者介绍3、引用数4、摘要分析(1)翻译(2)分析 5、总结分析(1)翻译(2)…...

JavaScript 实现导出内容自动居中:从原理到实践

引言 在前端开发中,我们经常会遇到需要将页面上的内容导出为文件(如 PDF、Excel 等)的需求。而在导出的内容中,让元素自动居中显示可以提升内容的美观度和专业性。本文将围绕 JavaScript 实现导出内容自动居中展开,详…...

Docker 速通(总结)

Docker 命令 镜像 docker build: 从 Dockerfile 构建镜像。docker pull: 从 Docker Hub 或其他注册表拉取镜像。docker push: 将镜像推送到 Docker Hub 或其他注册表。docker images: 列出本地镜像。docker rmi: 删除本地镜像。 容器 docker run: 创建并启动一个新的容器。…...

人工智能之数学基础:矩阵的降维

本文重点 在现实世界中,我们经常会遇到高维数据。例如,图像数据通常具有很高的维度,每个像素点都可以看作是一个维度。高维数据不仅会带来计算和存储上的困难,还可能会导致 “维数灾难”,即随着维度的增加,数据的稀疏性和噪声也会增加,从而影响数据分析的效果。因此,我…...

Object 转 JSONObject 并排除null和““字符串

public static JSONObject objToJSONObject(Object obj) throws Exception{//创建一个 HashMap 对象 map&#xff0c;用于存储对象的属性名和属性值。//key 是属性名&#xff08;String 类型&#xff09;&#xff0c;value 是属性值&#xff08;Object 类型&#xff09;Map<…...

mysql5.7主从部署(docker-compose版本)

mysql5.7主从部署&#xff08;docker-compose版本&#xff09; 1:docker-compose-test.yml 文件信息 version: 3services:# MySQL 数据库mysql-master:image: mysql:5.7container_name: mysql-masterenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: nacosports:- 23…...

Java+Html实现前后端客服聊天

文章目录 核心组件网络通信层事件调度层服务编排层 Spring实现客服聊天技术方案对比WebScoket建立连接用户上线实现指定用户私聊群聊离线 SpringBootWebSocketHtmljQuery实现客服聊天1. 目录结构2. 配置类3. 实体类、service、controller4. ChatWebSocketHandler消息处理5.前端…...

实用工具-Another Redis Desktop Manager介绍

GitHub&#xff1a;https://github.com/qishibo/AnotherRedisDesktopManager/releases Gitee&#xff1a;AnotherRedisDesktopManager 发行版 - Gitee.com Another Redis Desktop Manager 是一款免费的 Redis 可视化管理工具&#xff0c;具有以下特点和功能&#xff1a; 特…...

MySQL如何存储表情符号?

存储表情符号 默认mysql的字符集是utf8&#xff0c;排序规则为 utf8_general_ci INSERT INTO department (name) VALUES (&#x1f604;)在存储表情的时候会报 1366 - Incorrect string value: \xF0\x9F\x98\x84 for column name at row 1, Time: 0.007000s 这时需要修改字符…...

解锁 DeepSeek 安全接入、稳定运行新路径

背景 目前&#xff0c;和 DeepSeek 相关的需求总结为两类&#xff1a; 因官方 APP/Web 服务经常无法返回结果&#xff0c;各类云厂商、硬件或软件企业提供满血版或蒸馏版的 API 算力服务&#xff0c;还有不少基于开源家用计算和存储设备的本地部署方案&#xff0c;以分担 De…...

Spring Boot 配置属性 (Configuration Properties) 详解:优雅地管理应用配置

引言 Spring Boot 的 配置属性 (Configuration Properties) 是其另一个核心特性&#xff0c;它提供了一种 类型安全、结构化 的方式来管理应用的配置信息。 与自动配置相辅相成&#xff0c;配置属性允许开发者 以声明式的方式将外部配置 (如 properties 文件、YAML 文件、环境…...

【LangChain入门 1】安装

文章目录 一、安装LangChain二、安装Ollama三、Ollama下载DeepSeekR1-7b模型 本学习系列以Ollama推理后端作为大语言模型&#xff0c;展开对LangChain框架的入门学习。 模型采用deepseek-r1:7b。 毕竟是免费开源的&#xff0c;下载过程耐心等待即可。 如果可以连接外网&#x…...

HTML中required与aria required区别

在HTML中&#xff0c;required和aria-required"true"都用于标识表单字段为必填项&#xff0c;但它们的作用和适用场景有所不同&#xff1a; 1. required 属性 • 功能属性&#xff1a;属于HTML5原生属性&#xff0c;直接控制表单验证逻辑。 • 作用&#xff1a; • …...

IvorySQL 增量备份与合并增量备份功能解析

1. 概述 IvorySQL v4 引入了块级增量备份和增量备份合并功能&#xff0c;旨在优化数据库备份与恢复流程。通过 pg_basebackup 工具支持增量备份&#xff0c;显著降低了存储需求和备份时间。同时&#xff0c;pg_combinebackup 工具能够将多个增量备份合并为单个完整备份&#x…...

【css酷炫效果】纯CSS实现故障文字特效

【css酷炫效果】纯CSS实现故障文字特效 缘创作背景html结构css样式完整代码基础版进阶版(3D效果) 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492053 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚…...

SpringSecurity配置(自定义认证过滤器)

文末有本篇文章的项目源码文件可供下载学习 在这个案例中,我们已经实现了自定义登录URI的操作,登录成功之后,我们再次访问后端中的API的时候要在请求头中携带token,此时的token是jwt字符串,我们需要将该jwt字符串进行解析,查看解析后的User对象是否处于登录状态.登录状态下,将…...

设计模式(行为型)-备忘录模式

目录 定义 类图 角色 角色详解 &#xff08;一&#xff09;发起人角色&#xff08;Originator&#xff09;​ &#xff08;二&#xff09;备忘录角色&#xff08;Memento&#xff09;​ &#xff08;三&#xff09;备忘录管理员角色&#xff08;Caretaker&#xff09;​…...

WebAssembly 技术在逆向爬虫中的应用研究

一、引言 1.1 Web 技术发展与性能需求 在当今数字化浪潮中,Web 应用已成为人们生活和工作中不可或缺的一部分。从简单的静态网页到功能复杂的单页面应用(SPA),Web 技术的发展日新月异。随着用户对 Web 应用交互性、实时性和复杂性的要求不断提高,传统的 Web 开发技术面临着…...

Advanced Intelligent Systems 软体机器手助力截肢者玩转鼠标

随着科技的不断进步&#xff0c;假肢技术在改善截肢者生活质量方面取得了显著成就。然而&#xff0c;截肢群体在就业方面仍面临巨大困难&#xff0c;适龄截肢群体的就业率仅为健全群体的一半。现有的肌电控制假肢手在与计算机交互时存在诸多挑战&#xff0c;特别是截肢者在使用…...