RabbitMQ 入门 (Go) - 3. 模拟传感器,生成数据并发布 (3)

 36 - 42     行,区分当前值大于额定值或小于额定值两种情况,按不同的逻辑得出 maxStep  minStep

 44 行,使用 maxStep      minStep 以及随机数生成新的 value 数据。

 

运行 sensors 项目

使用 go run . 运行,命令行参数使用默认值即可:

RabbitMQ 入门 (Go) - 3. 模拟传感器,生成数据并发布

一切正常的话,它就会每秒钟生成 5 次数据。

 

如何运行多个传感器

生产环境中,通常会接收来自多个传感器的数据。

这里,我们让每个传感器都设置自己的路由 Key,所以 RabbitMQ 将会为每个 Key 创建一个 Queue

RabbitMQ 入门 (Go) - 3. 模拟传感器,生成数据并发布

但是这也会引起问题,就是之前章节里面的那个协调程序如何发现这些传感器呢?

首先,我们可以让每个传感器使用路由 Key 向一个所有传感器和协调程序都知晓的路径中发送一个消息。但这只能解决问题的一半,另一半我们以后再说。

 

将传感器数据发布到 RabbitMQ 创建传感器的消息类型

这里会使用到 encoding/gob 包。

看代码:

RabbitMQ 入门 (Go) - 3. 模拟传感器,生成数据并发布

 sensors 包中创建 model 包,并建立 models.go 文件。

在 models.go 的第 12 行,建立 SensorMessage 作为传感器传递消息的类型,里面包含三个字段分别是传感器名称、数值和时间戳。

很显然我们不能把 Go  struct 类型直接扔到 RabbitMQ 里面,但我们项目中的各种客户端只涉及到 Go 语言,所以在这里我使用 Go 语言的 gob 来对消息进行编码,这样会更高效一些。如果这个项目是跨语言的我可能会使用 JSON  Protocol Buffers

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfzsj.html