golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布
本章节阐述micro消息订阅和发布相关内容阅读本文前你可能需要进行如下知识储备golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境,golang微服务框架go-micro 入门笔记2.1 micro工具之micro apigolang微服务框架go-micro 入门笔记2.2 micro工具之micro webbroker代理微服务之间需要通过broker来传递消息,go-micro支持http/nats/memory三种broker,其中http是默认的broker。同时,go-micro以强大的插件形式,提供如下几种常见的broker。$ls gocloud/ googlepubsub/ grpc/ kafka/ mqtt/ nats/ nsq/ proxy/ rabbitmq/ redis/ snssqs/ sqs/ stan/ stomp/httpHTTP Broker 是基于HTTP的异步broker,源代码在github.commicrogo-microv1.9.1brokerbroker.go中,默认DefaultBroker为httpvar ( DefaultBroker Broker newHttpBroker() )httpbroker实际上就是一个结构体type httpBroker struct { id string //微服务ID address string //主机地址 opts Options //一些配置 mux *http.ServeMux //通过这个监听其他端发送的http请求 c *http.Client //通过这个发送请求到其他端 r registry.Registry sync.RWMutex subscribers map[string][]*httpSubscriber //订阅 running bool exit chan chan error // offline message inbox mtx sync.RWMutex inbox map[string][][]byte //数据缓存 }通过http.Client发送请求,通过http.ServeMux实现请求监听,通过inbox存储数据redisredis初始化代码如下//main.go //初始化URL格式redis://密码主机:端口/ b : redis.NewBroker( broker.Addrs(redis://user:secretlocalhost:6379/), ) //初始化 b.Init() //连接 b.Connect() // 新建service service : grpc.NewService( micro.Name(go.micro.web.config), micro.Version(latest), micro.Broker(b), ) //初始化service service.Init() //启动,运行,监听 service.Run()启动应用程序需要指定broker为redisgo run main.go --brokerredisgrpc 初始化初始化过程如下//main.go import ( github.com/micro/go-plugins/broker/grpc ) // 建立连接 b : grpc.NewBroker() b.Init() b.Connect() // 订阅事件 sub, _ : b.Subscribe(events) defer sub.Unsubscribe() // 发布事件 b.Publish(events, broker.Message{ Headers: map[string]string{type: event}, Body: []byte(an event), })启动应用程序需要指定broker为grpcgo run main.go --brokergrpcrabbitmq 初始化初始化过程如下//main.go import ( github.com/micro/go-plugins/broker/grpc ) b : rabbitmq.NewBroker( broker.Addrs(amqp://用户名:密码主机host:端口port), ) b.Init() b.Connect()启动应用程序需要指定broker为rabbitmqgo run main.go plugin.go --brokerrabbitmqmqtt初始化过程如下//main.go import ( github.com/micro/go-micro github.com/micro/go-plugins/broker/mqtt ) func main() { service : micro.NewService( micro.Name(my.service), micro.Broker(mqtt.NewBroker()), ) //... }启动应用程序需要指定broker为mqttgo run main.go plugin.go --brokermqtt其他其他可以阅读代码$GOPATH/src/github.com/micro/go-plugins/broker消息订阅和发布通过micro.RegisterSubscriber实现消息订阅消息订阅主要API接口如下,第一个参数标识消息主题,第二个参数表示服务实例。// Register Struct as Subscriber micro.RegisterSubscriber(go.micro.srv.testsrv, service.Server(), new(subscriber.Testsrv)) // Register Function as Subscriber micro.RegisterSubscriber(go.micro.srv.testsrv, service.Server(), subscriber.Handler)重点注意第三个参数,第三个参数是处理函数,可以是函数,也可以是实现了func Handler(ctx context.Context, msg *testsrv.Message) error方法的结构体,micro内部会根据参数类型自动适配。结构体中可以实现多个func Handler(ctx context.Context, msg *testsrv.Message) error类型方法通过broker.Subscribe实现订阅Broker提供如下接口type Broker interface { Init(...Option) error Options() Options Address() string Connect() error Disconnect() error Publish(topic string, m *Message, opts ...PublishOption) error Subscribe(topic string, h Handler, opts ...SubscribeOption) (Subscriber, error) String() string }Subscribe 订阅事件,topic代表主题,h事件处理函数Publish 发布事件消息处理函数Handler 定义在上述涉及到处理函数handler,具体含义如下type Handler func(Event) error // Event is given to a subscription handler for processing type Event interface { Topic() string Message() *Message Ack() error } type Message struct { Header map[string]string Body []byte }通过broker.Publish实现发布举例如下// 建立连接 b : grpc.NewBroker() b.Init() b.Connect() // 订阅事件 sub, _ : b.Subscribe(events) defer sub.Unsubscribe() // 发布事件 b.Publish(events, broker.Message{ Headers: map[string]string{type: event}, Body: []byte(an event), })通过micro publish实现发布举例如下micro publish go.micro.web.config hello实战和代码效果下载代码broker.zip解压到techidea8.com/microapp/broker下运行,效果图忑发布消息需要注意json格式字符串micro publish go.micro.srv.broker {\say\:\这是测试消息\}获得代码关注公众号回复micro-broker即可获得

相关新闻

云计算概念及发展历程

云计算概念及发展历程

云计算概念云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算机资源共享池(资源包括网络、服务器、存储、应用软件和服务),这些资源能够被快速提供,只需投入很…

2026/7/28 18:19:09 阅读更多 →
常用的激活函数总结

常用的激活函数总结

激活函数名表达式导数表达式sigmoidf(x)11e−x\frac{1}{1e^-x}1e−x1​f’(x)f(x)(1-f(x))Tanhf(x) tanh(x) ex−e−xexe−x\frac{e^x-e^-x}{e^xe^-x}exe−xex−e−x​f’(x)1-((fx))2((fx))^2((fx))2Reluf(x)max(0,x){0x≤0xx>0f(x)max(0,x) \begin{cases}0&\te…

2026/7/28 18:19:09 阅读更多 →
Java面向对象设计模式

Java面向对象设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠…

2026/7/28 18:18:09 阅读更多 →

最新新闻

企业AI定制开发踩过的坑——交付周期凭什么能压到几周

企业AI定制开发踩过的坑——交付周期凭什么能压到几周

# 企业AI定制开发踩过的坑——交付周期凭什么能压到几周## 引言企业想做AI定制开发,最常被问到的是"多久能交付"。市面上的回答从三个月到一年不等,企业听完往往打退堂鼓。其实定制开发的周期长,很多时候不是因为需求难&#xff0c…

2026/7/28 18:28:12 阅读更多 →
笔记四:常用布局:相对布局——RelativeLayout

笔记四:常用布局:相对布局——RelativeLayout

引言 在上一节中我们对LinearLayout进行了详细的解析,LinearLayout也是我们 用的比较多的一个布局,我们更多的时候更钟情于他的weight(权重)属性,等比例划分,对屏幕适配还是 帮助蛮大的;但是使用LinearLayout的时候也有一个问题,…

2026/7/28 18:28:12 阅读更多 →
如何快速找到并安装最适合的用户脚本:Greasy Fork实用指南

如何快速找到并安装最适合的用户脚本:Greasy Fork实用指南

如何快速找到并安装最适合的用户脚本:Greasy Fork实用指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork Greasy Fork是一个功能强大的在线用户脚本仓库,为用户提…

2026/7/28 18:28:12 阅读更多 →
问题解决方案之VC++

问题解决方案之VC++

文|Seraph本文档主要记录VC编程过程中,经常遇到的一些问题,以供大家参考。一、开发多文档形式在初始化时,使其框架以及视图最大化 框架最大化为在应用程序类的初始化函数中添加如下代码:BOOL CMDIAppDemoApp::InitInstance() …

2026/7/28 18:28:12 阅读更多 →
7天解放双手:AzurLaneAutoScript自动化脚本终极指南

7天解放双手:AzurLaneAutoScript自动化脚本终极指南

7天解放双手:AzurLaneAutoScript自动化脚本终极指南 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧蓝航…

2026/7/28 18:28:12 阅读更多 →
3步解锁VK视频下载自由:告别缓冲,永久珍藏精彩时刻

3步解锁VK视频下载自由:告别缓冲,永久珍藏精彩时刻

3步解锁VK视频下载自由:告别缓冲,永久珍藏精彩时刻 【免费下载链接】VK-Video-Downloader Скачивайте видео с сайта ВКонтакте в желаемом качестве 项目地址: https://gitcode.com/gh_mirrors/vk/VK…

2026/7/28 18:27:12 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻