使用 Tigase 和 res_xmpp 在 Asterisk 中发布订阅
Posted
技术标签:
【中文标题】使用 Tigase 和 res_xmpp 在 Asterisk 中发布订阅【英文标题】:Pubsub in Asterisk using Tigase and res_xmpp 【发布时间】:2013-12-07 09:39:02 【问题描述】:我安装并配置了 Tigase 服务器,用于在多个 Asterisk 服务器之间分配设备状态。服务器工作正常。它的配置文件如下:
--cluster-mode = true
config-type = --gen-config-def
--debug = server,xmpp,net
--user-db = mysql
--admins = admin@localhost
--user-db-uri = jdbc:mysql://localhost/tigasedb?user=root&password=no
--virt-hosts = localhost
--comp-name-3 = message-archive
--comp-class-3 = tigase.archive.MessageArchiveComponent
--comp-class-2 = tigase.socks5.Socks5ProxyComponent
--comp-name-2 = proxy
--comp-class-1 = tigase.muc.MUCComponent
--comp-name-1 = muc
--sm-plugins = +message-archive-xep-0136
#--ssl-container-class=tigase.extras.io.PEMSSLContextContainer
#--ssl-container-class=tigase.io.SSLContextContainer
--comp-name-1=pubsub
--comp-class-1=tigase.pubsub.PubSubComponent
我在两个不同的系统上安装了两个星号服务器。我还在两者上编译了 res_xmpp 并使用以下配置文件对其进行了配置:
[general]
debug=yes
autoregister=yes
collection_nodes=yes
pubsub_autocreate=yes
[tigase]
type=client
serverhost=192.168.20.105
username=server1@localhost/voip1
pubsub_node=pubsub.192.168.20.105
secret=123456
priority=25
port=5222
usetls=yes
usesasl=yes
status=available
statusmessage="I am available"
timeout=5
buddy=server2@localhost/voip2
distribute_events=yes
我的其中一台服务器的用户名是 server1@localhost/voip1,另一台是 server2@localhost/voip2。现在 xmpp 模块可以正常工作了。但是 pubsub 事件没有正确分发。如您所见,我使用 IP 地址来区分我的 Tigase 服务器。如果我在 res_xmpp 模块的 pubsub_node 选项中使用相同的 IP 地址,服务器将返回“未实现功能”错误,错误代码为 501;因此,我使用了 pubsub.192.168.20.105 并将其设置在两台服务器的 /etc/hosts 中,没有错误消息,但我也不会收到事件!!! 我该如何解决这个问题?
【问题讨论】:
【参考方案1】:我在 Tigase 服务器和 Asterisk 上遇到了同样的问题;你的问题是你设置:
pubsub_autocreate=yes
在您的 xmpp.conf 中配置。此选项会导致自动创建许多节点;如果您查看 Tigase 数据库中的 tig_nodes,您会看到已经创建了许多节点。您必须评论此选项。之后,您必须重新部署 Tigase SQL 架构,否则您必须删除所有这些节点;那么一切都会好起来的。通过查看 Asterisk CLI 中 res_xmpp 模块的调试输出,您会看到 res_xmpp 将尝试一次订阅许多节点,这会导致混乱,因为存在许多同名节点;服务器将返回 409 和 501 错误。
【讨论】:
【参考方案2】:问题可能与 Tigase 配置有关。你有:
--comp-class-1 = tigase.muc.MUCComponent
--comp-name-1 = muc
--comp-name-1=pubsub
--comp-class-1=tigase.pubsub.PubSubComponent
如您所见,您为 MUC 和 PubSub 组件分配了相同的编号。考虑到其他组件的其他配置,PubSub 的正确配置应该是:
--comp-name-4=pubsub
--comp-class-4=tigase.pubsub.PubSubComponent
【讨论】:
我已经这样做了,但这并不能解决我得到的问题:尚未支持功能【参考方案3】:config-type=--gen-config-def
#config-type= --gen-config-all
--admins=admin@localhost
--virt-hosts=tigase.lc
--debug=server
--user-db=mysql
--user-db-uri = jdbc:mysql://localhost/tigasedb?user=root&password=no
--comp-name-1=pubsub
--comp-class-1=tigase.pubsub.PubSubComponent
--comp-class-2 = tigase.muc.MUCComponent
--comp-name-2 = muc
--sm-plugins = +message-archive-xep-0136
--comp-name-3 = message-archive
--comp-class-3 = tigase.archive.MessageArchiveComponent
--comp-class-4 = tigase.socks5.Socks5ProxyComponent
--comp-name-4 = proxy
现在我的配置看起来像这样,但它又给了我功能未实现的错误。
【讨论】:
以上是关于使用 Tigase 和 res_xmpp 在 Asterisk 中发布订阅的主要内容,如果未能解决你的问题,请参考以下文章