第 36 - 42 行,区分当前值大于额定值或小于额定值两种情况,按不同的逻辑得出 maxStep 和 minStep
第 44 行,使用 maxStep 和 minStep 以及随机数生成新的 value 数据。
运行 sensors 项目
使用 go run . 运行,命令行参数使用默认值即可:
一切正常的话,它就会每秒钟生成 5 次数据。
如何运行多个传感器
生产环境中,通常会接收来自多个传感器的数据。
这里,我们让每个传感器都设置自己的路由 Key,所以 RabbitMQ 将会为每个 Key 创建一个 Queue:
但是这也会引起问题,就是之前章节里面的那个协调程序如何发现这些传感器呢?
首先,我们可以让每个传感器使用路由 Key 向一个所有传感器和协调程序都知晓的路径中发送一个消息。但这只能解决问题的一半,另一半我们以后再说。
将传感器数据发布到 RabbitMQ 创建传感器的消息类型
这里会使用到 encoding/gob 包。
看代码:
在 sensors 包中创建 model 包,并建立 models.go 文件。
在 models.go 的第 12 行,建立 SensorMessage 作为传感器传递消息的类型,里面包含三个字段分别是传感器名称、数值和时间戳。
很显然我们不能把 Go 的 struct 类型直接扔到 RabbitMQ 里面,但我们项目中的各种客户端只涉及到 Go 语言,所以在这里我使用 Go 语言的 gob 来对消息进行编码,这样会更高效一些。如果这个项目是跨语言的我可能会使用 JSON 或 Protocol Buffers。