感觉上当了,tigase的默认集群方案并不理想,文档给出的也就只能到50w在线用户;并没有想首页写的那样,单机50w,很好的集群;它另外一个集群包是收费的而且不便宜;
ps:做IM还是尽早放弃xmpp,自己用mqtt写服务器吧
官方文档:
https://projects.tigase.org/projects/tigase-server/wiki/Default_clustering_strategy
总的不适合做大集群,看了商业组件ACS的测试文档,默认的5个节点到40w多的样子;
大致的处理流程是:收到packet的节点(first节点),把packet发我所有的集群节点进行处理(怎么分发的这里文档写的有点不清楚,如果点对点应该是一个环处理,一个节点处理了,在给另外一个节点,只要有处理就返回给first节点;如果是群聊和上下线状态同步,应该是全部分发);集群的其他节点处理后,最终会回到第一个节点;如果没有处理就是离线处理;
所以,默认集群跨大在线连接数应该可以,但是对于想增加消息量,不理想,集群越大反而负载越高;
http://www.tigase.com/content/tigase-acs-advanced-clustering-strategy
商业组件是定期去获取license,如果获取不到,回关闭服务;(没办法免费用,对开发测试可以)
看下他们的测试文档,没有具体用过;
问了下价格是:2000$/服务器/每年
默认集策略就是处理简单,其他的组件都不用改动;看了下acs包里的jar,还是改了不少东西;
想自己修改集群策略看来不是简单的事情,还要兼顾其他组件;(以后再说)
记录下集群传输的报文
第一个节点发出去:
群节点发送策略方法:List<JID> tigase.cluster.strategy.DefaultClusteringStrategy.getNodesForPacketForward
发送:tigase.cluster.ClusterController.sendToNodes
<?xml version="1.0" encoding="utf-8"?> <cluster xmlns="tigase:cluster" type="set" to="sess-man@s2-4" from="sess-man@dell-pc" id="cl-12"> <control> <visited-nodes> <node-id>sess-man@dell-pc</node-id> </visited-nodes> <method-call name="sess-man-user-connected-sm-cmd"> <par name="userId">39@im.xx.com</par> <par name="resource">DELL-PC</par> <par name="connectionId">c2s@dell-pc/192.168.2.203_5522_192.168.2.203_17177</par> <par name="xmppSessionId">6268b3ff-93ed-410d-a888-8babc70cbf63</par> <par name="auth-time">19551</par> </method-call> <first-node>sess-man@dell-pc</first-node> </control> </cluster>
返回到第一个节点:ClusterController.handleClusterPacket
<?xml version="1.0" encoding="utf-8"?> <cluster xmlns="tigase:cluster" from="sess-man@dell-pc" type="set" id="cl-5688" to="sess-man@dell-pc"> <control> <visited-nodes> <node-id>sess-man@dell-pc</node-id> <node-id>sess-man@s3-1</node-id> </visited-nodes> <method-call name="sess-man-packet-forward-sm-cmd"/> <first-node>sess-man@dell-pc</first-node> </control> <data> <message xmlns="jabber:client" from="39@im.xx.com/DELL-PC" type="chat" id="ab21a" to="6@im.xx.com/DELL-PC"> <body>12</body> <active xmlns="http://jabber.org/protocol/chatstates"></active> </message> </data> </cluster>
http://www.tigase.org/content/load-balancing-external-components-cluster-mode
http://www.tigase.org/content/basic-configuration-options
组件端:
config-type=--gen-config-comp --admins=wyadmin@im.xx.com,mobile@im.xx.com --virt-hosts = im.xx.com --debug=server,xmpp --user-db=mysql --user-db-uri=jdbc:mysql://192.168.1.15:3306/tigasedb2?user=tigase2&password=tigase2&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true #组件订阅发布 --comp-name-1 = pubsub --comp-class-1 = tigase.pubsub.PubSubComponent #多人聊天 --comp-name-3= muc --comp-class-3= tigase.muc.MUCComponent #不添加该代码,以默认配置创建的房间会被锁住,其他人无法加入 muc/muc-lock-new-room[B]=false muc/default_room_config/muc#roomconfig_persistentroom=true muc/default_room_config/muc#roomconfig_enablelogging=true #组件部分 --external=muc.im.xx.com:muc-pass:connect:5270:im.xx.com;s2-4.im.xx.com;s3-1.im.xx.com:accept,pubsub.im.xx.com:pubsub-pass:connect:5271:im.xx.com;s2-4.im.xx.com;s3-1.im.xx.com:accept
服务端:
--comp-name-1 = ext --comp-class-1 = tigase.server.ext.ComponentProtocol --external = muc.im.xx.com:muc-pass:listen:5270:im.xx.com:accept:ReceiverBareJidLB,pubsub.im.xx.com:pubsub-pass:listen:5271:im.xx.com:accept:SenderBareJidLB