发布订阅
方法A:
1:修改init.properties配置文件,启用发布订阅组建
--virt-hosts = domain.com
--comp-name-2 = pubsub
--comp-class-2 =tigase.pubsub.PubSubComponent
2:创建一个Node节点
实际上,每个订阅者都是关联到该节点上,发布者将消息发布到创建的该节点上,进而间接的发布给所有的订阅者。
pubSubDomain= pubsub@domain.com;
PubSubModulemodule = jaxmpp.getModulesManager().getModule(PubSubModule.class);
module.createNode(BareJID.bareJIDInstance(pubSubDomain),nodeName,
newPubSubAsyncCallback() {
publicvoidonTimeout() throwsJaxmppException {
}
publicvoidonSuccess(Stanza responseStanza) throwsJaxmppException {
}
protectedvoidonEror(IQ response, ErrorCondition errorCondition,
PubSubErrorConditionpubSubErrorCondition) throwsJaxmppException {
}
});
3:客户端订阅
//组建name+ @ + domain.com
pubSubJID= BareJID.bareJIDInstance(“pubsub@domain.com”)
nodeName= “nodeName” //创建的节点名
subscriberJID= “test1@domain.com” //订阅者
PubSubModulemodule = jaxmpp.getModulesManager().getModule(PubSubModule.class);
module.subscribe(pubSubJID,nodeName, subscriberJID, newSubscriptionAsyncCallback() {
publicvoidonTimeout() throwsJaxmppException {
}
protectedvoidonEror(IQ response, ErrorCondition errorCondition,
PubSubErrorConditionpubSubErrorCondition) throwsJaxmppException {
}
protectedvoidonSubscribe(IQ response, String node, JID jid, String subID,
Subscriptionsubscription) {
}
});
4:发布(必须要有发布权限的帐号,才能发布)
bareJID = BareJID.bareJIDInstance(“pubsub@domain.com”)//参考3订阅的pubSubJID
nodeName = “”; //发布到那个Node节点
itemId = “itemId_001”; //item节点的ID
Elemententry = newDefaultElement("entry");
Elementtitle = newDefaultElement("title");
title.setValue("发布标题");
Elementsummary = newDefaultElement("summary");
summary.setValue("发布的消息.....");
entry.addChild(title);
entry.addChild(summary);
jaxmpp.getModulesManager().getModule(PubSubModule.class)
.publishItem(bareJID,nodeName, itemId, entry, newPubSubAsyncCallback() {
publicvoidonTimeout() throwsJaxmppException {
}
publicvoidonSuccess(Stanza responseStanza) throwsJaxmppException {
}
protectedvoidonEror(IQ response, ErrorCondition errorCondition,
PubSubErrorConditionpubSubErrorCondition) throwsJaxmppException {
}
});
jaxmpp.disconnect();
5:解除订阅
Jaxmpp().getModulesManager().getModule(PubSubModule.class).unsubscribe
方法B:
1:init.properties添加如下代码,通过二级域名使用发布订阅组件。各参数含义,参考官网配置
http://www.tigase.org/content/tigase-xmpp-server-configuration-properties
--external= pubsub.domain.com:pubsub-pass:connect:5270:localhost:accept
2:其余代码同上,不过pubSubDomain需要修改为pubsub.domain.com
发布订阅协议及其他功能,参考官方的扩展协议
http://xmpp.org/extensions/xep-0060.html 发布订阅协议的英文文档
http://wiki.jabbercn.org/XEP-0060 发布订阅协议翻译后的中文文档