ejabberd在微服务网络中

时间:2016-02-24 11:31:54

标签: xmpp ejabberd microservices mongoose-im

我愿意在微服务网络中使用ejabberd / mongooseIm。除了REST API网络之外,XMPP应该是我们的聊天协议。我想将在xmpp服务器下游传入的消息发送到工作服务。有人这样做过,还是可以引导我走向正确的方向?

我的第一个想法是使用RabbitMQ将新的传入消息发送给工作人员。

2 个答案:

答案 0 :(得分:0)

基本上有两种选择让您的员工可以访问由ejabberd / MongooseIM路由的消息。我会专注于MongooseIM,因为我知道它更好(免责声明:我在开发团队中)。

第一种是以异步/轮询方式扫描邮件存档。 Message Archive Management描述了用于访问它的XMPP级别协议,但对于您的用例,重要的部分是消息持久性 - 因此只需确保在服务器配置中启用相关模块(mod_mam)并且消息将被命中数据库。支持MAM的数据库是PostgreSQL和Riak,尽管还有一些关于Cassandra后端(YMMV)的工作。只要有适合您所选语言的数据库驱动程序,这就不需要修改服务器/在Erlang中。自PR#657以来,如果您愿意编写序列化模块,则可以以原始XML或甚至某种自定义格式存储消息。

第二个选项是使用hooks and handlers的服务器机制(也可在ejabberd中使用),它可以触发服务器对“用户发送消息”,“用户登录”,“用户登录”等事件的操作out,“...但是,这需要用Erlang编写的服务器端扩展。在最简单的情况下,扩展可以通过AMQP转发任何有趣的事件(带有消息内容和元数据),或者只是调用一些外部HTTP / REST API - 这样,真正的工作由工作人员执行,为您提供实现语言的自由。此选项也不需要启用mod_mam或设置数据库以实现消息持久性(对于持久性消息队列,您仍然可以使用该数据库...)。

总的来说,这个想法是完全可行的。

答案 1 :(得分:0)

通常,用于为机器到机器,物联网,微服务等构建消息传递系统的最常见的XMPP扩展是PubSub,如XEP-0060中所定义。

这是您可以在ejabberd中启用的模块。它基于API,因此您甚至可以根据特定应用程序自定义该模块的行为。

Pubsub基本上允许解耦发件人和接收者,并且专门针对该用例而设计。