Tigase 外部组件作为单个 jar
Posted
技术标签:
【中文标题】Tigase 外部组件作为单个 jar【英文标题】:Tigase external component as a single jar 【发布时间】:2019-04-11 13:17:30 【问题描述】:我已经实现了具有某些功能的 tigase 组件,现在试图弄清楚如何将其用作外部组件。 现在看来,我必须在上面设置带有我的组件的单独的 tigase 服务器,然后配置主 tigase 服务器以将该单独的服务器称为外部组件。
我想做的是将外部 tigase 组装到一个 jar 中,以便能够使用一行命令运行它,而无需预先安装 tigase。
问题有可能吗?
似乎 tigase 需要数据库才能运行,并且管理指南鼓励将共享主服务器的数据库用于外部组件。我不确定 tigase 是否可以在没有数据库的情况下启动,这使得使用简单的 java -jar 命令运行起来相当困难。
【问题讨论】:
【参考方案1】:现在看来我必须设置单独的 tigase 服务器和我的组件,然后配置主 tigase 服务器以将该单独的服务器称为外部组件。
这是正确的。 Tigase XMPP 服务器在这方面遵循XEP-0114: Jabber Component Protocol 和XEP-0225: Component Connections。请参阅 External Component Configuration 详细了解如何在 Tigase 中进行配置。
我想做的是将外部 tigase 组装到一个 jar 中,以便能够使用一行命令运行它,而无需预先安装 tigase。 问题是有可能吗?
您可以创建一个“超级罐子”——是的,这是可能的。一种可能的解决方案是将组件创建为单独的 maven 项目,将 tigase-server
配置为依赖项,然后利用 jar-with-dependencies
或 Apache Maven Assembly Plugin。它将提取所有必需的、已配置的依赖项并将它们放在单个 jar 文件中。但请注意,例如数据库驱动程序将不包括在内。
似乎 tigase 需要数据库才能运行,并且管理指南鼓励将共享主服务器的数据库用于外部组件。我不确定 tigase 是否可以在没有数据库的情况下启动,这使得使用简单的 java -jar 命令运行起来相当困难。
确实需要数据库 - 这有助于使您的配置与可能运行您的外部组件的许多节点保持一致(您只需要在一个节点上更新一次,所有剩余的节点都会自动更新它),但您不需要t 必须使用主服务器数据库。详情请见Usage with a separate database。
如果您只使用外部组件的单个本地实例,那么您可以创建一个简单的 derby 数据库并将您的配置放在 etc/externalComponentItems
文件中
【讨论】:
谢谢。由于数据库的必要性,这种方法确实有效,但对我来说不是很实用。 您可以使用 Derby 数据库,而数据库由 JVM 内部处理 - 也就是说,无需安装额外的软件或维护额外的进程。 是的,但我仍然需要在其上运行模式 ddl。 正确,但有一个脚本 (scripts/tigase.sh install-schema
) 可以为您处理此问题。【参考方案2】:
是的,Tigase 组件框架/API 需要 Tigase 服务器核心才能运行。而且您只需使用自定义组件加载 Tigase 服务器核心。 为简单起见,建议在 Tigase 主 XMPP 服务器和组件实例之间共享数据库,但不是强制性的。如果真的不需要 DB,我认为外部组件实例甚至可以使用虚拟 DB 连接器运行。
【讨论】:
以上是关于Tigase 外部组件作为单个 jar的主要内容,如果未能解决你的问题,请参考以下文章