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

我们测试一下,命令行输入 go run . --help,其结果如下:

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

 

生成模拟数据

要生成模拟传感器的数据,需要使用到 math/rand  time 这两个包。

先看代码:

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

 17 行,我们需要一个 *rand.Rand 类型来生成随机数,它又需要一个源,这里使用 time.Now().UnixNano() 生成源,这样做的好处是因为这个时间纳秒数永远不会重复。

 19 行,声明 value,它表示传感器的数值,在这先生成一个初始值。

 20 行,是额定值,在这里也就是最大值最小值的中间平均值。

 25 行,把更新频率(每秒更新的次数)转化为了两次更新之间的时间间隔(毫秒),并解析成 time.Duration 这个类型。

 26 行,time.Tick 函数会返回一个 time  Channel,该函数会按照提供的时间间隔不断触发,并向这个 Channel 发送当前时间。

 28 行,使用 for range 来处理 signal 这个 Channel,每次 Channel 中有数据传递过来,我们就使用 calcValue 这个函数来生成新的模拟数据。

 29 行,把生成的最新数据打印一下即可。

 

calcValue 函数

生成模拟数据的逻辑是如果数据偏离额定值,那么尽量让下次生成的值向额定值靠拢。

这部分可根据自己的特定需求来实现,不必和我的相同。

先看代码:

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

 35 行,声明了 maxStep  minStep 两个变量,表示本次更新相比上次所能够发生的最大变化和最小变化幅度。

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

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