MultiUserChatLight 组消息监听器

Posted

技术标签:

【中文标题】MultiUserChatLight 组消息监听器【英文标题】:MultiUserChatLight Group Message Listener 【发布时间】:2017-07-16 11:00:47 【问题描述】:

使用带有 smack 库的 MucLight XEP 开发聊天 APP Group 功能 ,问题是我能够成功地将消息发送到组,但是当听到消息时我感到困惑,在 smack 库中我们有

 multiUserChatLight.addMessageListener (new MessageListener ( ) 
                @Override
                public void processMessage(Message message) 

                
            );

但是它的组特定监听器,意味着它只监听 multiuserchatlight 参考组,这有些不是我需要的,因为每当我重新连接聊天服务器时,我都需要针对我参与的每个组注册这个监听器,这是不好的意见。 另一种方法是注册packetlistener,这在某些情况下也没什么问题,比如作为群组成员,我收到了我发送到群组的消息,

那么还有其他选择吗?

谁能告诉我哪里错了?

【问题讨论】:

【参考方案1】:

每当您连接到服务器并通过身份验证时,您都需要始终注册消息侦听器。我已经使用 StanzaListener 添加 MucLight 侦听器。

  public RegisterXmppListener registerXmppListener;

  public void registerMessageListener()
    debugLog("registerMessageListener");
    if(mStanzaListener !=null)
        connection.removeSyncStanzaListener(mStanzaListener);

    StanzaTypeFilter filter = new StanzaTypeFilter(Message.class);

    mStanzaListener=new StanzaListener() 
        @Override
        public void processStanza(Stanza stanza) throws SmackException.NotConnectedException, InterruptedException 
            if(registerXmppListener!=null) 
                registerXmppListener.onMessageReceived(stanza);
            
        
    ;
    connection.addSyncStanzaListener(mStanzaListener, filter);

registerMessageListener 在您通过服务器身份验证后注册。

【讨论】:

以上是关于MultiUserChatLight 组消息监听器的主要内容,如果未能解决你的问题,请参考以下文章

Redis基于Stream的消息队列 - 消费者组模式

kafka的消费者

kafka的消费者

kafka分片和消费组的概念

多网卡下组播的监听与发送

微前端架构实现(项目引入,消息总线,构建部署,监听服务)