在自定义到期后销毁 Ejabberd 中的 MUC 房间的最佳实践

问题描述

我们公开了一项服务,该服务允许客户在给定的到期时间内在 Ejabberd 中创建 MUC 房间。在此时间之后,无论房间是否处于活动状态,都应销毁房间。

我们目前通过以下方式实现这一目标:

  • 在创建房间时在房间选项中设置自定义到期时间元数据。
  • 运行一个 cronjob,查询 Ejabberd 的所有在线房间名称查询每个名称的房间选项,并请求在到期时销毁房间。

这种方法非常幼稚,随着房间数量增加,我们看到列表在线房间管理员调用失败的频率越来越高,并出现以下错误

2021-04-28 15:24:57.011582+00:00 [error] REST API Error: muc_online_rooms_by_regex([{<<"regex">>,<<".*">>},{<<"service">>,<<"ourchatservice">>}]) -> error:{badmatch,{error,notfound}} [{mod_muc_admin,get_room_config,1,[{file,"src/mod_muc_admin.erl"},{line,814}]},{mod_muc_admin,build_summary_room,3,394}]},

我们怀疑列表错误可能与我们正在使用的大量 MUC 房间有关 - 数以万计 - 我们正在寻找一种方法支持功能,而无需昂贵的操作,例如列出所有在线房间。

解决方法

muc_online_rooms_by_regex([{>,>

我想知道为什么使用 muc_online_rooms_by_regex 和 .* 一样无用的正则表达式,而不是简单地使用 muc_online_rooms...

我们公开了一项服务,该服务允许客户在给定的到期时间内在 Ejabberd 中创建 MUC 房间。在此时间之后,无论房间是否处于活动状态,都应销毁房间。

运行一个 cronjob,查询 Ejabberd 的所有在线房间名称,查询每个名称的房间选项,并请求在到期时销毁房间。

房间有非常严格和确定的到期时间,就像银翼杀手中的复制人一样,即使他们的神也不能延长他们的寿命?

在这种情况下,您可以在自己的房间名称中包含该到期时间,这样您就不需要查询房间详细信息:房间名称本身会说明房间应该何时销毁:bluetag_review__expiry_20210508@conference.localhost

在这种情况下,使用 muc_online_rooms_by_regex 列出房间名称为今天或前几天到期日期的房间是有意义的。