Java: Receive answer from Windows Azure Service Bus Queue -
i'm trying implement request response queue using windows azure service bus queue. created 2 queues: request , response.
my client side send message request queue, server side take message request queue, , put response response queue. client side check response queue if there messages. when run 1 client it's working fine.
when run more 1 client, after time clients side don't pull off message response queue. queue sure isn't empty, because client side check how many messages there.
for receiving message use:
receivemessageoptions options = receivemessageoptions.default;
options.setreceivemode(receivemode.peek_lock);
options.settimeout(20);
receivequeuemessageresult resultqueuemessage = service.receivequeuemessage(responsequeuename);
brokeredmessage receivedmessage = resultqueuemessage.getvalue();
any appreciated,
asia
the clients locking messages never deleting them.
as described in how use service bus queues:
in peeklock mode, receive becomes 2 stage operation, makes possible support applications cannot tolerate missing messages. when service bus receives request, finds next message consumed, locks prevent other consumers receiving it, , returns application. after application finishes processing message (or stores reliably future processing), completes second stage of receive process calling delete on received message. when service bus sees delete call, mark message being consumed , remove queue.
the example below demonstrates how messages can received , processed using peeklock mode:
receivemessageoptions opts = receivemessageoptions.default; opts.setreceivemode(receivemode.peek_lock); while(true) { receivequeuemessageresult resultqm = service.receivequeuemessage("testqueue", opts); brokeredmessage message = resultqm.getvalue(); if (message != null && message.getmessageid() != null) { try { system.out.println("body: " + message.tostring()); system.out.println("messageid: " + message.getmessageid()); system.out.println("custom property: " + message.getproperty("testproperty")); // remove message queue system.out.println("deleting message."); service.deletemessage(message); } catch (exception ex) { // indicate problem, unlock message in queue system.out.println("inner exception encountered!"); service.unlockmessage(message); } } else { system.out.println("finishing - no more messages."); break; // added handle no more messages in queue. // instead wait more messages added. } }
according application's logic, have decide whether want multiple clients receiving messages same queue (in case client instance can receive message), or if want each client have distinct queue receives messages addressed it.
Comments
Post a Comment