go-micro V2 从零开始(六)集成nats消息中间件

本文相关代码:gitee


前言

本章我们为系统集成第三方的消息中间件。

与注册中心一样,go-micro框架为消息中间件提供了标准的接口Broker。只要实现这个接口就可以接入任意消息中间件。

下面我们以官方已经实现的nats为例,它是go语言开发的高性能消息中间件,也是我司项目的默认消息中间件。


具体步骤

一、NATS

1.1 简介

nats是一个开源的,云原生的消息系统。以下定义来自知乎用户Lucas分享

nats核心基于EventMachine开发,原理是基于消息发布订阅机制,每台服务器上的每个模块会根据自己的消息类别向MessageBus发布多个消息主题,而同时也向自己需要交互的模块,按照需要的主题订阅消息。 能够达到每秒8-11百万个消息,整个程序很小只有3M,它不支持持久化消息,如果你离线,你就不能获得消息。

一些适用nats的场景有:

  • 高吞吐量的消息分散 —— 少数的生产者需要将数据发送给很多的消费者。
  • 寻址和发现 ——将数据发送给特定的应用实例,设备或者用户,也可用于发现并连接到基础架构中的实例,设备或用户。
  • 命令和控制(控制面板)——向程序或设备发送指令,并从程序/设备中接收状态,如SCADA,卫星遥感,物联网等。
  • 负载均衡 ——主要应用于程序会生成大量的请求,且可动态伸缩程序实例。
  • N路可扩展性 ——通信基础架构能够充分利用go的高效并发/调度机制,以增强水平和垂直的扩展性。
  • 位置透明 ——程序在各个地理位置上分布者大量实例,且你无法了解到程序之间的端点配置详情,及他们所生产或消费的数据。
  • 容错

使用nats streaming可以做到持久化,缓存等功能,附加场景有:

  • 从特定时间或顺序消费
  • 持久性
  • 有保证的消息投递

1.2 启动

nats的官方地址:NATS

官方有极其详尽的文档帮助我们对nats进行开发和使用,考虑到下载速度,仍然使用docker国内镜像启动nats,以下命令完全来自 官方文档

> docker run -p 4222:4222 -ti nats:latest

[1] 2020/09/25 02:59:19.212638 [INF] Starting nats-server version 2.1.8
[1] 2020/09/25 02:59:19.212671 [INF] Git commit [c0b574f]
[1] 2020/09/25 02:59:19.227179 [INF] Starting http monitor on 0.0.0.0:8222
[1] 2020/09/25 02:59:19.227325 [INF] Listening for client connections on 0.0.0.0:4222
[1] 2020/09/25 02:59:19.227333 [INF] Server id is NBGZSRZ7YMP2G64PVWABX5PQFZBPYO6EBLB6HOGYYRPMDEJIT25DQ36C
[1] 2020/09/25 02:59:19.227335 [INF] Server is ready
[1] 2020/09/25 02:59:19.277974 [INF] Listening for route connections on 0.0.0.0:6222

二、配置消息中间件

消息中间件的配置同样支持硬编码、命令行参数和环境变量,下面是简单演示:

2.1 代码中配置

消息的订阅方和发送方,配置也基本一致,下面以我们之前的task-srvachievement-srv之间的finished消息为例分别展示。

2.1.1 消息订阅

编辑go-todolist/achievement-srv/main.go,加入nats配置使用nats去订阅之前的任务完成消息:

...
service := micro.NewService(
		micro.Name("go.micro.service.achievement"),
		micro.Version("latest"),
		// 配置nats为消息中间件,默认端口是4222
		micro.Broker(nats.NewBroker(
			// 地址是我本地nats服务器地址,不要照抄
			broker.Addrs("nats://172.18.0.58:4222"),
		)),
	)
...

由于achievement-srv是一个纯消息驱动的服务,我们不配置etcd服务发现相关内容

2.1.2 消息发送

编辑go-todolist/task-srv/main.go在初始化服务的地方加入nats配置:

...
service := micro.NewService(
		micro.Name("go.micro.service.task"),
		micro.Version("latest"),
		// 配置etcd为注册中心,配置etcd路径,默认端口是2379
		micro.Registry(etcd.NewRegistry(
			// 地址是我本地etcd服务器地址,不要照抄
			registry.Addrs("172.18.0.58:2379"),
		)),
		// 配置nats为消息中间件,默认端口是4222
		micro.Broker(nats.NewBroker(
			// 地址是我本地nats服务器地址,不要照抄
			broker.Addrs("nats://172.18.0.58:4222"),
		)),
	)
...

2.2 命令行参数

在启动命令中增加如下参数:

  • --broker=nats
  • --registry_address=172.18.0.58:4222

启动演示略

2.3 环境变量

在环境变量中配置注册中心:

  • MICRO_BROKER - 注册方式
  • MICRO_BROKER_ADDRESS - 中心地址

启动演示略


三、使用micro web测试

上一章我们使用micro web命令启动了一个简易的web端micro控制台。
这个控制台除了能看到注册的服务,还提供了一个简单的服务调用界面,可以直接在在网页上对服务发起调用。

3.1 启动服务

>  micro --registry=etcd --registry_address=172.18.0.58:2379 web

3.2 调用接口

打开http://localhost:8082/client,会看到一个简易的接口调用界面,说明见图:
web端接口调用


总结

到这里我们就完成了nats的引入,go-micro还实现了其他很多消息中间件的接入,如http, nats, rabbitmq,接入方式都差不多,有兴趣可以自行阅读源码或官方文档


支持一下

原创不易,买杯咖啡,谢谢:p

支持一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值