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

 54 行,使用 编码器的 Encode 方法对消息进行编码。

 56 行,创建要发送给 RabbitMQ 的消息(amqp.Publishing 类型),这里只需要填写 Body 字段即可,其它的字段根据自己的需求选填即可。

 60 行,使用 Channel 来发布消息,这里使用的是默认的 Exchange,路由 key 就是 Queue 的名字,最后一个参数就是发布的消息。

 

运行程序

运行 sensors 包:

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

 

打开控制台:

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

可以看到发送频率确实是每秒 5 次。

 

打开 sensor Queue

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

目前已经有 384 条消息了,都没有被发送。

 

随便点开一个消息查看其内容:

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

可以看到 Body 应该是 Base64 编码的。因为 gob 编码器使用的是二进制消息格式,尽可能的高效,所以在控制台里面它没有一个有意义的表述展示。

 

然后,先停止运行程序。

 

传感器上线时通知协调程序

最后我们就来处理上面那个问题:当传感器上线的时候,得让协调程序知道,并发送数据。

因为每个传感器都创建了一个自己的 Queue,所以在没有帮助的情况下,协调程序将无法有效知道这些传感器。

这个问题实际上具体需要做两件事,我们先来做第一件事:

多个传感器他们 Queue 的名称是不一样的,是动态的,所以我们需要一个大家都知道的 Queue,它用来将每个新创建的传感器的 Queue 名称发送给协调程序。

 

首先,在 queuetools.go 里面添加这个 Queue 的名称,使用一个常量保存:

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

 

然后,在 main.go 里,使用这个名称创建一个 Queue,并将传感器的 Queue 的名称发布上去:

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

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