1

xmpp サービスに必要なサーブレット URL マッピング (/_ah/xmpp/message/chat/) によって、xmpp メッセージの送受信の両方にそのサーブレットのみを使用するように制限されますか?

私のアプリケーションはメッセージを受信し、それらを処理のために「inQueue」に追加します。処理が完了すると、結果が「outQueue」に追加されます。理想的には、outQueue に割り当てられたワーカー サーブレットが応答を送信するようにしたいと考えています。

私はプッシュ キューを使用しており、サーブレットは明らかに HTTP POST 要求によって呼び出されます...

xmpp サービスを使用して outQueue ワーカー (これは明らかに /_ah/xmpp/message/chat/ にマップされていません) からメッセージを送信しようとすると、予想どおり何もしません。

/_ah/xmpp/message/chat/ にマップされたサーブレットで:

//Generate a Memcache key 
String key = generateMemcacheKey(message);

//Serialize the message as xml using getStanza (for now, just put in the senderJID as string)
String senderJIDString = message.getFromJid().getId();

//Cache the message in Memcache
cache.put(key, senderJIDString);

//Enqueue a task for the message
private Queue queue = QueueFactory.getQueue("inQueue");
queue.add(TaskOptions.Builder.withUrl("/xmppParser").param("memcacheKey", key));

xmppParser サーブレットの doPost メソッド:

//Extract message from memcache
String key = req.getParameter("memcacheKey");
String recipientJIDString = (String)cache.get(key);

//Todo Detect language

//Todo Parse Message into an Imperative accordingly (For now, just reply hello)

//Todo Handle Session status

//Put Imperative into memcache (For now, just put recipientID in)
cache.put(key, recipientJIDString);

//Enqueue appropriately
Queue queue = QueueFactory.getQueue("outQueue");
queue.add(TaskOptions.Builder.withUrl("/responseServlet").param("memcacheKey", key
));

ここで、この responseServlet に返信を送信してもらいたい:

//Get a handler on the memcache
MemcacheService cache = MemcacheServiceFactory.getMemcacheService();

//Extract the key to the response from the request
String key = req.getParameter("memcacheKey");

//Extract the message from the memcache ( For now it's just the JID of the sender)
String recipientJIDString = (String)cache.get(key);

//Parse it into a message (For now just make a simple "I hear you" message)
JID recipientJID = new JID(recipientJIDString);
Message response = new MessageBuilder()
    .withMessageType(MessageType.NORMAL)
    .withRecipientJids(recipientJID)
    .withBody("I hear you")
    .build();

//Send the message
XMPPService xmpp = XMPPServiceFactory.getXMPPService();
xmpp.sendMessage(response);

サーブレット マッピングはすべてコーシャであり、xmpp サービスはメッセージを送信できません。nullポインター例外が発生しますが、memcacheビューアーは受信者JIDもコーシャであることを確認します... /_ah/xmpp/message/chat/ にマップされたサーブレットのみがメッセージを送信できると思いますか、それとも間違っていますか?

XMPP は開発サーバーでサポートされていないようで、実稼働環境の構成を見落としている可能性があるため、ライブサイト自体でテストすることを余儀なくされています...

とても感謝しております!

RAM

4

0 に答える 0