Hi all,
In the new message broker implementation we are implementing broker
semantics based on AMQP 0.9.1 specification.
>From an administrative operations perspective, we have identified following
resources to be exposed through restful web services.
- exchanges
- queues
- topics
- consumers
There are currently two types of exchange. Namely,
- direct exchange - relates to mostly known queue scenarios
- topic exchange - relates to topic scenarios (pub-sub pattern)
*Queues and topics*
Within the broker, there are only queues. These queues are bound to direct
and topic exchanges. Depending on the bound exchange we perceive them as
either pub-sub pattern or queue pattern.
Therefore within the Admin API's we refer to either a queue or a topic as a
*destination.*
*Consumers*
For each internal queue (a destination) there will be consumers. Messages
are delivered to consumers in round robin manner.
In topic scenario (pub-sub pattern) topic exchange will bind a separate
queue (a destination) per each consumer with the same topic name. When a
message is published it will get delivered to the set of queues with the
matching topic and then to the relevant consumers on those queues
Considering the above broker semantics we have come up with the following
Admin API design for the broker
Base path /broker/v.1.0
*Exchanges*
*Method*
*Path*
*Payload*
1 Create Exchange POST /exchanges { "name": "exchangeName", "type":
"amq.direct", "durable": true }
2 Get All exchanges GET /exchanges
3 Get Exchange GET /exchanges/{exchangeName}
4 Delete Exchange DELETE /exchanges/{exchangeName}
*Destinations (Queues/Topics)*
5 Create Queue/Topic POST /exchanges/{exchangeName}/destinations { "name":
"queueName", "durable": true, "autoDelete": false }
6 List Queues/Topics GET /exchanges/{exchangeName}/destinations
7 Get Queue Details GET
/exchanges/{exchangeName}/destinations/{destinationName}
8 Delete Queue DELETE
/exchanges/{exchangeName}/destinations/{destinationName}
*Consumers (for a queue or topic)*
9 List subscriptions for a destination GET
/exchanges/{exchangeName}/destinations/{destinationName}/consumers
10 Get subscriber details GET
/exchanges/{exchangeName}/destinations/{destinationName}/consumers/{consumerTag}
11 Close subscriber DELETE
/exchanges/{exchangeName}/destinations/{destinationName}/consumers/{consumerTag}
When retrieving a set of exchanges, destinations or consumers we will be
able to filter the result set by way of using query parameters.
Regards,
Asitha
--
*Asitha Nanayakkara* <http://asitha.github.io/>
Associate Technical Lead
WSO2, Inc. <http://wso2.com/>
Mob: +94 77 853 0682
[image: https://wso2.com/signature] <https://wso2.com/signature>
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture