Context简介: Context由Google官方开发,在1.7版本引入, 在Go服务器程序中,每个请求都会有一个goroutine去处理。然而,处理程序往往还需要创建额外的goroutine去访问后端资源,比如数据库、RPC服务等。由于这些goroutine都是在处理同一个请求,所以它们往往需要访问一些共享的资源,比如用户身份信息、认证
之前我们通过Watch机制实现了简化版本的监视服务,这里我们基于这种机制实现一个发布订阅模式,但是因为RPC缺乏流机制导致每次只能返回一个结果,在发布订阅模式中,由调用者主动发起的发布行为类似于一个普通函数调用,而被动的订阅者则类似gRPC客户端单向流中的接收者。现在我们可以尝试基于gRPC的流特性构造一个发布订阅系统。 首先我们需要使用一个第三方模块:go get
在前一篇介绍中实现了一个工作队列,它假设队列中的每一个任务都只会被分发到一个工作者进行处理。在本篇中,我们尝试将同一个消息发送给多个消费者进行处理,这就是广为人知的发布/订阅模式。本篇通过搭建一个日志系统来阐述发布/订阅模式,它包含两部分内容:一个用于产生日志消息的程序,另一个用于接收和打印消息。
在这个日志系统中,每一份接收者程序的拷贝都能收到消息,因此我们可以轻易地使用一个程序将日志写入磁盘,
转载
2023-07-02 19:54:12
84阅读
介绍gRPC 是由Google开发的一种与语言无关的高性能远程过程调用 (RPC) 框架,在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。对应的官方库已托管在GitHub上优点:现代高性能轻量级 RPC 框架。协定优先 API开发,默认使用协议缓冲区,允许与语言无关的实现。可用于多种语言的工具,以生成强类型服务器和
grpc之发布订阅
获取docker的pubsub包
go get github.com/moby/pubsub
基于之前的golang版基础上实现
添加proto
pubsub.proto
syntax = "proto3";
//option java_package = "com.colobu.rpctest";
package pubsu
原创
2023-10-16 10:46:58
250阅读
通讯模式简介gRPC应用程序提供四种基础的通讯模式,这四种通信模式基本能满足绝大多数应用场景。得益于底层HTTP2长连接以及消息推送的机制,gRPC也把推送的能力进行抽象形成开发可调用的API。如上图,四种通信模式为:Unary RPC - 也叫做 Simple RPC 简单的请求-响应,一问一答式的RPC请求,类似本地方法调用Server-side streaming RPC - 服务端流RPC
gRPC,即google Remote Procedure Call Protocol;在gRPC里,客户端可以直接调用不同机器上的服务应用的方法,就像本地对象一样,所以创建分布式应用和服务就变简单了。gRPC是基于定义一个服务,指定一个可以远程调用的带有参数和返回类型的的方法。在服务端,服务实现这个接口并且运行gRPC服务处理客户端调用。在客户端,有一个stub提供和服务端相同的方法
grpc介绍在正式介绍 gRPC 之前,我们先简单介绍一下什么是 RPC,它是 Remote Procedure Call 的缩写,中文译为远程过程调用(也可译为远程方法调用或远程调用),它是计算机通信协议,该协议可以实现调用远程服务就像调用本地服务一样简单,无需关心跨网络,跨平台,跨语言等问题。gRPC 是通信协议基于 HTTP/2,支持多语言的 RPC 框架,使用 Protobuf 作为它的接
# Golang Redis发布订阅
## 简介
Redis是一种高性能的键值缓存数据库,而发布订阅(Pub/Sub)是Redis提供的一种消息传递机制。本文将介绍如何使用Golang与Redis进行发布订阅。
## 什么是发布订阅
发布订阅模式是一种消息传递模式,它包括两个角色:发布者和订阅者。发布者将消息发布到指定的频道,而订阅者则可以订阅一个或多个频道并接收发布者发布的消息。
发布
原创
2023-09-12 15:44:22
187阅读
背景:redis集群执行lua脚本时不同于单机情况,lua脚本在执行时需要确保key在同一个node节点上,换句话说也就是需要保证 slot=crc16%16384,通过对key进行hash运算,其slot会分布在同一个node节点所属范围。解决思路:为了使key都落在一个node节点上可以通过添加 {} hashTag来实现。原理:相同的hashtag被分配到相同的节点,相同的槽。
hash算法
转载
2023-05-25 11:22:06
212阅读
一、背景 业务中经常会有这样的场景: 到期后自动执行指定操作; 查询某个任务是否完成,未完成等待一定时间再次查询; 回调通知,当回调失败时,等待后重试;等等还有其他很多类似的场景。 很多时候我们会直接通过一个本地定时器来帮我们完成这个任务。如果我们的系统是多实例分布式的,本地定时器就会面临很多问题,如:怎么保证重复处理的问题;统一管控的问题等等。面
转载
2023-06-05 15:38:19
159阅读
文章目录简介发布订阅模型简介发布订阅模型简写为 pub/sub 模型,消息生产者成为了发布者 publisher,消息消费者成为了订阅者 subscriber。传统生产者消费者模型是将消息发送到一个队列中,发布订阅模型是将消息发布给一个主题与其把发布订阅者模式我更喜欢理解成发布订阅器模式,订阅者更像是一个订阅器,发布者中含有多个订阅器,每个订阅器有自己的一种订阅规则,同时订阅器中会存在多个不同的订阅信息,但是这些订阅信息都是满足该订阅器的订阅规则的发布订阅模型发布订阅支持包package pub
原创
2021-10-25 10:20:02
523阅读
# golang 使用redis实现发布订阅
## 前言
在现代的分布式系统中,发布订阅模式是一种常见的消息传递机制。它允许消息的发布者将消息发送到多个订阅者,从而实现了解耦和可扩展性。而Redis作为一个高性能的内存数据库,也提供了发布订阅功能。本文将介绍如何使用Golang编写代码来实现Redis的发布订阅功能。
## Redis的发布订阅模式
在Redis中,发布订阅模式由两个主要组件组
原创
2023-09-12 05:38:55
322阅读
Redis和NSQ都有完善的订阅和发布实现,但参考它们的源码实现,做个实际例子,对两边
原创
2023-01-30 17:01:32
159阅读
# Golang Redis 订阅发布的实际应用
## 1. 介绍
Redis 是一个开源的内存数据库,提供了键值存储、发布/订阅、持久化、集群等功能。Golang 是一种高效的编程语言,结合 Redis 的订阅发布功能,可以实现高效的消息传递系统。本文将介绍如何使用 Golang 和 Redis 实现订阅发布的功能,并展示一个实际的应用场景。
## 2. 订阅发布功能
Redis 的订阅
文章目录简介发布订阅模型简介发布订阅模型简写为 pub/sub 模型,消息生产者成为了发布者 publisher,消息消费者成为了订阅者 subscriber。传统生产者消费者模型是将消息发送到一个队列中,发布订阅模型是将消息发布给一个主题与其把发布订阅者模式我更喜欢理解成发布订阅器模式,订阅者更像是一个订阅器,发布者中含有多个订阅器,每个订阅器有自己的一种订阅规则,同时订阅器中会存在多个不同的订阅信息,但是这些订阅信息都是满足该订阅器的订阅规则的发布订阅模型发布订阅支持包package pub
原创
2022-01-06 14:08:58
322阅读
文章目录前言一、什么是负载均衡,负载均衡的策略有哪些?0.负载均衡之前先设置一下动态端口python篇golang篇1.集中式load balance2.进程内load balance3.独立进程load balance二、常用负载均衡策略1.轮询(Round Robin)法2.随机法3.源地址哈希法4.加权轮询(Weight Round Robin)法5.加权随机(Weight Random)
gRPC入门gRPC是Google公司基于Protobuf开发的跨语言的开源RPC框架。gRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多个服务,对于移动设备更加友好。本节将讲述gRPC的简单用法。1 gRPC技术栈Go语言的gRPC技术栈图所示:最底层为TCP或Unix Socket协议,在此之上是HTTP/2协议的实现,然后在HTTP/2协议之上又构建了针对Go语言的gRPC
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Golang interface 是什么?二、为什么有 interface?1.编写泛型算法2.隐藏具体实现3.提供拦截点(providing interception points)4.多态(polymorphism)三、非入侵式四、类型断言总结参考 前言interface 是GO语言的基础特性之一。可以理解为一种
目录前言RPCRPC优点:gRPC:ProtoBufgRPC原生例子proto文件服务端客户端gRPC+gokit简单栗子服务端客户端测试拦截器服务端客户端元数据MD发送方法接收方法 前言RPC是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。 微服务常用更高效的rpc(远程过程调用协议)通信。RPC优点:提高开发效率,开发人员