On Wed, Jan 10, 2018 at 5:40 PM, Asitha Nanayakkara <asi...@wso2.com> wrote:

> Adding Harshak, Sanjeewa and Malinthaa
>
> On Wed, Jan 10, 2018 at 5:37 PM, Asitha Nanayakkara <asi...@wso2.com>
> wrote:
>
>> 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}/dest
>> inations/{destinationName}
>> 8 Delete Queue DELETE /exchanges/{exchangeName}/dest
>> inations/{destinationName}
>>
>>
>>
>>
>>
>>
>> *Consumers (for a queue or topic)*
>>
>>
>> 9 List subscriptions for a destination GET /exchanges/{exchangeName}/dest
>> inations/{destinationName}/consumers
>> 10 Get subscriber details GET /exchanges/{exchangeName}/dest
>> inations/{destinationName}/consumers/{consumerTag}
>> 11 Close subscriber DELETE /exchanges/{exchangeName}/dest
>> inations/{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.
>>
> This API looks good and followed REST nature. I assume exchange name,
destination name, consumer tag etc are unique. Then only we can build above
mentioned resource model.
Also do we need to let users to check the possibility of creating exchange,
destination or consumer tag before we create it. Then we might need http
head method as well.
If you need to update que details then you have to use put as well. Ex:
enable/disable auto delete after we create it first time.
Also lets define proper response codes as well(201 to created, 202 accepted
etc).

What is the plan to expose this API to outside? Is it MSF4J? If that is the
case you can start with swagger definition and move forward.

Thanks,
sanjeewa.


>> Regards,
>> Asitha
>>
>> --
>> *Asitha Nanayakkara* <http://asitha.github.io/>
>> Associate Technical Lead
>> WSO2, Inc. <http://wso2.com/>
>> Mob: +94 77 853 0682 <+94%2077%20853%200682>
>> [image: https://wso2.com/signature] <https://wso2.com/signature>
>>
>>
>
>
> --
> *Asitha Nanayakkara* <http://asitha.github.io/>
> Associate Technical Lead
> WSO2, Inc. <http://wso2.com/>
> Mob: +94 77 853 0682 <077%20853%200682>
> [image: https://wso2.com/signature] <https://wso2.com/signature>
>
>


-- 

*Sanjeewa Malalgoda*
WSO2 Inc.
Mobile : +94713068779

<http://sanjeewamalalgoda.blogspot.com/>blog
:http://sanjeewamalalgoda.blogspot.com/
<http://sanjeewamalalgoda.blogspot.com/>
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to