RabbitMQ 入门 (Go) - 6. 数据持久化(上)

RabbitMQ 入门 (Go) - 6. 数据持久化(上)

 

 

 从本节开始,我介绍一下如何将相关数据持久化到数据库,也就是上图中蓝色的部分。

 

目前的问题

我先运行 个传感器和个协调器,这里我使用了批处理文件:

RabbitMQ 入门 (Go) - 6. 数据持久化(上)

 

 

 

运行后,看一下 RabbitMQ 的管理控制台:

RabbitMQ 入门 (Go) - 6. 数据持久化(上)

注意上面前面几个 Queue,这些 Queue 就是我们让传感器和协调器监听那两个 Fanout Exchange 时创建的,因为这两个 Exchange 不使用路由 Key 来决定接收者,我使用了空字符串“”作为这些 Queue 的名称,而RabbitMQ 就会为它们赋予一个唯一的名字。

 

因为目前创建的 Queue 都是临时的,如果我重新启动系统,RabbitMQ会创建另一套不同的 Queue 来完成工作,这样的话系统资源就会被慢慢的耗尽,所以这个问题需要解决。

 

调整 autoDelete 参数

首先修改 tools 包下的 queuetools.go 里面的GetQueue 函数,添加一个 autoDelete 参数:

RabbitMQ 入门 (Go) - 6. 数据持久化(上)

GetQueue 函数会确保创建一个Queue 从而能接收到消息。刚创建它的时候,我的意图是让它作用于 Direct Exchange 和命名的 Queue。后来我对它进行了扩展使用,也可以应用于匿名的 Queue

再说一下 autoDelete 参数的作用是:若值为 true,那么如果一个 Queue 它没有被注册任何的使用者,这个 Queue 就会被删除。针对上述问题中的临时 Queue,这就是我想要的效果。但是针对传感器的数据 Queue,我还是希望在系统重启后,这些 Queue 能够保留。

所以,我为该函数添加了一个 autoDelete 参数,在创建 Queue 的时候,可以对 autoDelete 进行设置。

 

有三个调用该函数的地方需要调整代码,先打开 sensors.go

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

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