使用 smack 读取 pubsub 中的传入消息数据包

Posted

技术标签:

【中文标题】使用 smack 读取 pubsub 中的传入消息数据包【英文标题】:read incoming Message packets in pubsub using smack 【发布时间】:2012-12-08 11:57:36 【问题描述】:

我正在尝试使用 openfire 服务器和 asmack 库来实现 pubsub。 我已将我的节点配置为 subscribers 必须获得 publishers 的批准

现在我正在尝试使用以下代码读取 Message 数据包,但我没有收到任何数据包。我想阅读Message 数据包,因为我想知道订阅者何时向发布者发送订阅请求。

PacketTypeFilter filter = new  PacketTypeFilter(org.jivesoftware.smack.packet.Message.class);

    PacketListener myListener = new PacketListener()

        @Override
        public void processPacket(Packet packet) 
            // TODO Auto-generated method stub

            Log.d("PACKET" , "READ");

            if(packet instanceof org.jivesoftware.smack.packet.Message)

                    org.jivesoftware.smack.packet.Message msg = (org.jivesoftware.smack.packet.Message) packet;

            Log.d("MY MESSAGE" , msg.toXML()+ "");


                    
                

            ;

    cxmpp.addPacketListener(myListener, filter);

我只想读取传入的消息包

【问题讨论】:

【参考方案1】:

如果您拥有所有配置位并且您的 pubsub 组件正常工作,那么为了获得正常消息,您可以执行以下操作:

ConnectionConfiguration config = new ConnectionConfiguration("ADDRESS",PORT); // service name, also known as XMPP domain of the target server. 
config.setServiceName(this.pubsubServiceAddress);
connection = new XMPPConnection(config);
connection.connect();

PacketFilter filter = new MessageTypeFilter(Message.Type.normal); 

connection.addPacketListener(new PacketListener()  
    public void processPacket(Packet packet) 
    Message mes = (Message)packet;
        // do your stuff here
    
, filter);

【讨论】:

以上是关于使用 smack 读取 pubsub 中的传入消息数据包的主要内容,如果未能解决你的问题,请参考以下文章

在 Dataflow Python 中从 PubSub 读取 AVRO 消息

我如何在 smack openfire android 中监听传入的订阅请求

在 Dataflow Managed Service 中运行时,Dataflow 未读取 PubSub 消息

Smack MUC 邀请

GCP Pubsub 中的消息丢失和重复

我们如何在 smack 或来自 android 的 xmpp 中获得对发件人的消息读取/看到确认