Skip to content

Commit e473920

Browse files
committed
PROTON-2890: [Python] Make client example more robust
Make the client robust against incoming replies with unknown correlation ids. Which would propably correspond to resent server replies.
1 parent 1f3c73e commit e473920

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

python/examples/client.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,44 @@
2626

2727
class Client(MessagingHandler):
2828
def __init__(self, url, requests):
29-
super(Client, self).__init__()
29+
super(Client, self).__init__(auto_accept=False)
3030
self.url = url
3131
self.requests = requests
32+
self.outstanding = {}
33+
self.msgs = 0
3234

3335
def on_start(self, event):
3436
self.sender = event.container.create_sender(self.url)
3537
self.receiver = event.container.create_receiver(self.sender.connection, None, dynamic=True)
3638

3739
def next_request(self):
3840
if self.receiver.remote_source.address:
39-
req = Message(reply_to=self.receiver.remote_source.address, body=self.requests[0])
41+
request = self.requests.pop(0)
42+
req = Message(reply_to=self.receiver.remote_source.address, correlation_id=self.msgs, body=request)
43+
self.outstanding[req.correlation_id] = request
44+
self.msgs += 1
4045
self.sender.send(req)
4146

4247
def on_link_opened(self, event):
4348
if event.receiver == self.receiver:
4449
self.next_request()
4550

4651
def on_message(self, event):
47-
print("%s => %s" % (self.requests.pop(0), event.message.body))
4852
if self.requests:
4953
self.next_request()
54+
55+
message = event.message
56+
delivery = event.delivery
57+
correlation_id = message.correlation_id
58+
request = self.outstanding.pop(correlation_id, None)
59+
60+
if request:
61+
print(f"{request}({correlation_id}) => {message.body}")
62+
self.accept(delivery)
5063
else:
64+
print(f"Unexpected response - unknown correlation_id({correlation_id}): {message.body}")
65+
self.reject(delivery)
66+
if not self.outstanding:
5167
event.connection.close()
5268

5369

0 commit comments

Comments
 (0)