第 54 行,使用 编码器的 Encode 方法对消息进行编码。
第 56 行,创建要发送给 RabbitMQ 的消息(amqp.Publishing 类型),这里只需要填写 Body 字段即可,其它的字段根据自己的需求选填即可。
第 60 行,使用 Channel 来发布消息,这里使用的是默认的 Exchange,路由 key 就是 Queue 的名字,最后一个参数就是发布的消息。
运行程序
运行 sensors 包:
打开控制台:
可以看到发送频率确实是每秒 5 次。
打开 sensor Queue:
目前已经有 384 条消息了,都没有被发送。
随便点开一个消息查看其内容:
可以看到 Body 应该是 Base64 编码的。因为 gob 编码器使用的是二进制消息格式,尽可能的高效,所以在控制台里面它没有一个有意义的表述展示。
然后,先停止运行程序。
传感器上线时通知协调程序
最后我们就来处理上面那个问题:当传感器上线的时候,得让协调程序知道,并发送数据。
因为每个传感器都创建了一个自己的 Queue,所以在没有帮助的情况下,协调程序将无法有效知道这些传感器。
这个问题实际上具体需要做两件事,我们先来做第一件事:
多个传感器他们 Queue 的名称是不一样的,是动态的,所以我们需要一个大家都知道的 Queue,它用来将每个新创建的传感器的 Queue 名称发送给协调程序。
首先,在 queuetools.go 里面添加这个 Queue 的名称,使用一个常量保存:
然后,在 main.go 里,使用这个名称创建一个 Queue,并将传感器的 Queue 的名称发布上去: