- 1 exchange 'oae-activity-pushexchange'
- 1 queue per app server

The app servers add a binding between the exchange and their queue per stream (activityStreamId).

```
The servers are idle:
    |‾‾‾‾‾‾‾‾‾‾‾‾|                               |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|
    |  exchange  |                               |  queue-app-0 |-----|  app 0  |
    |____________|                               |______________|     |_________|
                                                 |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|
                                                 |  queue-app-1 |-----|  app 1  |
                                                 |______________|     |_________|
Client 1 comes in and opens a websocket to the "app0" app server.
He subscribes on push notifications for a piece of content: `c:cam:abc123#activity`.
This will cause the app server to add a binding from the exchange to its queue for that activityStreamId.
    |‾‾‾‾‾‾‾‾‾‾‾‾|                               |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|                                |‾‾‾‾‾‾‾‾‾‾‾‾|
    |  exchange  |  b'c:cam:abc123#activity'     |  queue-app-0 |     |  app 0  |                                |  client 1  |
    |____________|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|______________|‾‾‾‾‾|_________|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|____________|
                                                 |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|
                                                 |  queue-app-1 |     |  app 1  |
                                                 |______________|‾‾‾‾‾|_________|
A new revision of that piece of content gets uploaded and triggers an activity.
A activity will be sent to the push exchange with a routing key of `u:cam:abc123#activity`.
Because there is a binding between the exchange and app0's queue, the activity will end up on the app server
and will eventually be sent to the client
 u:cam:abc123#activity |‾‾‾‾‾‾‾‾‾‾‾‾|    ------------------->     |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|   -------->   |‾‾‾‾‾‾‾‾‾‾‾‾|
 --------------------> |  exchange  |                             |  queue-app-0 |     |  app 0  |               |  client 1  |
                       |____________|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|______________|‾‾‾‾‾|_________|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|____________|
                                                                  |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|
                                                                  |  queue-app-1 |     |  app 1  |
                                                                  |______________|‾‾‾‾‾|_________|
Another client comes in (or the same client in a different tab), opens a websocket to app1 and subscribes on the
same content items's activity stream. A binding will be added from the exchange to app 1 like so:
    |‾‾‾‾‾‾‾‾‾‾‾‾|                             |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|               |‾‾‾‾‾‾‾‾‾‾‾‾|
    |  exchange  |    b'c:cam:abc123#activity' |  queue-app-0 |     |  app 0  |               |  client 1  |
    |____________|\‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|______________|‾‾‾‾‾|_________|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|____________|
                   \
                    \ b'c:cam:abc123#activity' |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|               |‾‾‾‾‾‾‾‾‾‾‾‾|
                     \-------------------------|  queue-app-1 |     |  app 1  |               |  client 2  |
                                               |______________|‾‾‾‾‾|_________|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|____________|
When another activity is triggered on the piece of content it will be delivered on both sockets
 u:cam:abc123#activity |‾‾‾‾‾‾‾‾‾‾‾‾|      --------------->       |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|  --------->   |‾‾‾‾‾‾‾‾‾‾‾‾|
---------------------> |  exchange  |                             |  queue-app-0 |     |  app 0  |               |  client 1  |
                       |____________|\‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|______________|‾‾‾‾‾|_________|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|____________|
                                      \    --------------->
                                       \                          |‾‾‾‾‾‾‾‾‾‾‾‾‾‾|     |‾‾‾‾‾‾‾‾‾|  --------->   |‾‾‾‾‾‾‾‾‾‾‾‾|
                                        \-------------------------|  queue-app-1 |     |  app 1  |               |  client 2  |
                                                                  |______________|‾‾‾‾‾|_________|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|____________|
```


There are some brief docs on the init method, but I'll expand on them a bit more.