Pub / Sub app
Code a Pub/Sub app to publish ‘greetings ’ message. The app will also receive the greetings message from other app instances. We can run 100's of these pub/sub app instances. Each of them will send a single greeting message and will receive greetings from all the other app instances.
Before trying this sample, follow the Setup and initialization . For more information, see the Channels Pub/Sub API reference documentation.
Download the pub_sub_app by clicking on this link
For this application, you will require to use databridges_sio_client_lib (dataBridges Client Library) with python.
- Install databridges client library
pip3 install databridges_sio_client_lib
pub_sub_app.py file and open it in your favorite editor.
Copy paste below code and you are ready to run this example.
# Code a Pub/Sub app to publish 'greetings ' message. The app will also receive the greetings message from other app instances. # We can run 100's of these pub/sub app instances. Each of them will send a single greeting message and will receive greetings from all the other app instances. import asyncio import string import random # Include dataBridges client library package from databridges_sio_client_lib import dBridges from databridges_sio_client_lib.exceptions import dBError class pubSubApp(): def __init__(self): self.dbridge = None self.helloWorld = None self.sessionID = None # Bind to disconnected event, to get intimation about dataBridges network disconnection. async def disconnected(self): print("Disconnected from dataBridges real-time network:") async def connected(self): print("Connected to dataBridges real-time network !!!"); try: # Subscribe to channel 'Hello-World', self.helloWorld = await self.dbridge.channel.subscribe("Hello-World") except Exception as dberror: print("Channel subscription faced an exception: ", dberror.source, dberror.code, dberror.message) if self.helloWorld != None: # We will bind to subscription success event. On success, we will publish event messages. async def subscribe_success(payload, metadata): # we can also check if the helloWorld subscription isOnline. if(self.helloWorld.isOnline()): print("Publishing greetings ") try: await self.helloWorld.publish("greetings", "Greetings from " + self.sessionID) except Exception as dberror: print("Publishing messages faced an exception: ", dberror.source, dberror.code, dberror.message) self.helloWorld.bind("dbridges:subscribe.success", subscribe_success) async def subscribe_fail(payload, metadata): print("Channel subscription faced an exception:", payload.source, payload.code, payload.message) # Bind to Subscription failure event, to get notified if subscription to channel has been rejected by dataBridges network self.helloWorld.bind("dbridges:subscribe.fail", subscribe_fail) async def greetingEvent(payload, metadata): print("received greeting message : ", payload) # Bind to the channel.event that you want to process. Here we will bind to 'greetings' self.helloWorld.bind("greetings", greetingEvent) async def MainExecute(self): # Initialize dataBridges client self.dbridge = dBridges() # Replace your application key below, which you have received from dataBridges management portal. # use system variables for greater security of your keys self.dbridge.auth_url = "_____URL_____" # Replace your authentication url below, which you have received from dataBridges management portal. # example https://endpoint01.databridges.io/client/v1/authenticate # use system variables for greater security of your keys self.dbridge.appkey = "____appKey______" # lets create a sessionID self.sessionID = ''.join(random.choices(string.ascii_lowercase + string.digits, k=7)) print("sessionID is " + self.sessionID); self.dbridge.connectionstate.bind("connected", self.connected) self.dbridge.connectionstate.bind("disconnected", self.disconnected) # Connect to dataBridges. If any runtime error it will be caught in catch(). try: await self.dbridge.connect() except dBError as dberror: print("dataBridges Connection exception..", dberror.source, dberror.code, dberror.message) if __name__ == '__main__': try: pubSub = pubSubApp() asyncio.run(pubSub.MainExecute()) except Exception as e: print(e)
Save your file and run
python3 pub_sub_app.py from the same folder.