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

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

针对传感器传送数据的 Queue,我要让它能够保留下来,所以 autoDelete 就是 false

而 discoveryQueue 是用来监听协调器的“发现”请求的,我想让每个传感器每次上线都会得到一个新的 Queue,这里 autoDelete 就设置为 true,这样的话 RabbitMQ 就会把旧的 Queue 自动清理掉。

 

调整 queuelistener.go 里面的调用:

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

这里得到的临时 Queue 是用来监听传感器上线时或响应协调器发现请求时来发布数据 Queue 名称的。

这里函数调用的 autoDelete 参数也设置为 true,从而让它们可以自动被清除掉。

 

测试运行

把之前的 Queue 都删掉:

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

 

然后再运行 个传感器和个协调器:

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

现在又是很多的 Queue

 

然后我们再停掉所有的传感器和协调器:

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

可以看到传感器传送数据的 Queue 被保留了,而其它的临时 Queue 都自动删除掉了,这就是我们想要的效果。

 

泛化事件数据

到目前为止,系统中只发布了一种类型的事件(接收到传感器数据时的事件),而且目前还没有任何使用者监听这个事件。接下来我们就要完善事件这部分功能了,但首先必须做出一些优化修改,以便能真正满足需求。

 

目前 eventaggregator.go 里面包含了所有添加监听者以及向监听者发布事件的方法。

但现在的情况是事件的使用者也知道如何自行发布事件,这点不太好,因为它们不需要这样做。代码修改如下:

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

为了尽量少的暴露功能,我为事件的使用者创建了 EventRaiser 这个接口,它里面只有一个 AddListener 方法,与已经实现的 AddListener 方法相几乎完全匹配。

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

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