在本文中,我们将看到如何创建一个发布/订阅应用程序(消息,聊天,通知),它完全基于MongoDB(没有任何消息代理,如RabbitMQ,JMS等)。
因此,需要做些什么来实现这样的目标:
- 应用程序“发布”消息。 就我们而言,我们只是将文档保存到MongoDB中
- 另一个应用程序或线程订阅这些事件,将自动接收消息。 在我们的案例中,这意味着应用程序应该自动从MongoDB中接收新创建的文档
通过MongoDB的一些非常酷的功能,所有这些都是可能的: 加盖的集合和可尾的游标 。
上限集合和尾光标
如您在文档中所看到的,上限集合是固定大小的集合,其工作方式类似于循环缓冲区:一旦集合填满了分配的空间,它就会通过覆盖最旧的文件来为新文件腾出空间。
可以使用Tailable游标查询MongoDB上限集合,该游标类似于unix tail -f命令。 您的应用程序继续将文档插入集合中,以获取文档。 我也喜欢称其为“连续查询”。 现在我们已经了解了基础知识,让我们实现它。
构建一个非常基本的应用程序
创建收藏
首先要做的是创建一个新的有上限的集合:
$> mongo
use chat
db.messages.drop()
db.createCollection('messages', { capped: true, size: 10000 })
db.messages.insert({"type":"init"});
为简单起见,我使用MongoDB Shell在聊天数据库中创建消息集合。
您可以在第7行上看到如何创建具有上限的集合,其中包含2个选项:
- capped:true:这个很明显
- size:10000:创建上限集合时,这是必选选项。 这是最大大小(以字节为单位)。 (将提高到256的倍数)
最后,在第9行上,我插入了一个虚拟文档,这也是强制执行的,以便能够使可尾游标起作用。
编写申请
现在我们有了集合,让我们编写一些代码。 首先在