Hi Asitha,
Don't we need APIs to update the existing Queues and Exchanges? This can be
achieved by the *PUT *method.

Regards,
Vinod

On Fri, Jan 12, 2018 at 11:22 AM, Asitha Nanayakkara <asi...@wso2.com>
wrote:

> +1. At the moment we don't have that feature implemented within broker
> core. I have created an issue [1] to track this.
>
> [1] https://github.com/wso2/message-broker/issues/142
>
>
> On Fri, Jan 12, 2018 at 10:02 AM, Hasitha Hiranya <hasit...@wso2.com>
> wrote:
>
>> Hi Asitha,
>>
>> We need a API to purge a queue as well.
>>
>> Thanks
>>
>> On Fri, Jan 12, 2018 at 9:35 AM, Asitha Nanayakkara <asi...@wso2.com>
>> wrote:
>>
>>> Hi all,
>>>
>>> Taking all the concerns discussed in to account I did some updates on
>>> the design.
>>>
>>> With this design, I'll be exposing the exchanges, bindings, queues, and
>>> consumers. This is to avoid confusion in coming up with a design to expose
>>> topics (pub-sub pattern) as a first-class citizen (Since it is another
>>> exchange within the broker).
>>>
>>> Following is the updated design
>>>
>>>
>>> Base path /broker/v.1.0
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Queues
>>>
>>>
>>> 5 Create Queue/Topic POST /queues/ { "name": "queueName", "durable":
>>> true, "autoDelete": false }
>>> 6 List Queues/Topics GET /queues
>>> 7 Get Queue Details GET /queues/{queueName}
>>> 8 Delete Queue DELETE /queues/{queueName}
>>>
>>>
>>>
>>>
>>>
>>>
>>> Subscriptions for a queue or topic
>>>
>>>
>>> 9 List subscriptions for a destination GET /queues/{queueName}/consumers
>>> 10 Get subscriber details GET /queues/{queueName}/consumers/
>>> {consumerTag}
>>> 11 Close subscriber DELETE /queues/{queueName}/consumers/{consumerTag}
>>>
>>>
>>>
>>>
>>>
>>>
>>> Exchanges
>>>
>>>
>>> 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}
>>>
>>>
>>>
>>>
>>>
>>>
>>> Bindings
>>>
>>>
>>>
>>> List bindings for exchange GET /exchanges/{exchangeName}/bindings
>>>
>>> Add binding POST /exchanges/{exchangeName}/bindings {"routingKey":
>>> "routingPattern", "queueName": "myQueue", "filterExpression": "MessageId =
>>> 12345"}
>>>
>>> Delete binding DELETE /exchanges/{exchangeName}/bind
>>> ings/{routingKey}/{queueName}
>>>
>>>
>>>
>>>
>>>
>>>
>>> I have few concerns regarding deleting bindings. There is no unique key
>>> for the binding hence I was thinking of something like following for the
>>> delete binding (combination of routing key and queue name is unique)
>>> */exchanges/{exchangeName}/bindings/{routingKey}/{queueName}*
>>>
>>> What about using something like 
>>> */exchanges/{exchangeName}/bindings?routingKey=myTopic&queueName=tmp_1234
>>> *for the delete? Can we consider a URI with query params as a unique
>>> resource?
>>>
>>> I have attached the swagger file for the API as well.
>>>
>>> Regards,
>>> Asitha
>>>
>>>
>>> On Thu, Jan 11, 2018 at 8:36 AM, Asanka Abeyweera <asank...@wso2.com>
>>> wrote:
>>>
>>>> Hi Asitha,
>>>>
>>>> I think it is better to say queues rather than destinations since the
>>>> actions mean different things in queues and topics. For example,
>>>>
>>>>    - Create
>>>>       - Queues - we can create the queue in broker core. This will be
>>>>       useful in assigning permissions
>>>>       - Topics - We can't do anything at broker code. Corresponding
>>>>       queues will depend on the subscription id if durable, random name if 
>>>> non
>>>>       durable.
>>>>    - Search
>>>>    - Queues - we can return queues matching the search criteria
>>>>       - Topics - It's hard to decide what to return since their can be
>>>>       unlimited number of options.
>>>>    - Delete
>>>>       - Queues - we can delete the specified queues
>>>>       - Topics - Again bit ambiguous what to delete. Maybe we can go
>>>>       through the matching bindings and delete the matching queues. My 
>>>> opinion is
>>>>       we should not do such a thing.
>>>>
>>>> Addtionally when we are desiging the REST API better if we dont expose
>>>> functionalities that we are expecting to expose through the HTTP transport.
>>>> I think the main objective in the first iteration should be to assist the
>>>> users in debugging issues. Some information that a user might need is,
>>>>
>>>>    - Queue list
>>>>    - Subscriptions for a given queue
>>>>    - Queue details - number messages etc
>>>>    - Message details
>>>>    - Permission details
>>>>    - Binding details of a queue. Will be very useful for topic
>>>>    scenarios.
>>>>
>>>>
>>>> On Thu, Jan 11, 2018 at 12:41 AM, Eranda Rajapakshe <eran...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi Asitha,
>>>>>
>>>>> Thanks for the explanation.
>>>>>
>>>>> On Wed, Jan 10, 2018 at 10:29 PM, Asitha Nanayakkara <asi...@wso2.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Eranda,
>>>>>>
>>>>>>
>>>>>> On Wed, Jan 10, 2018 at 6:47 PM, Eranda Rajapakshe <eran...@wso2.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi all,
>>>>>>>
>>>>>>> Small addition to the Malintha's suggestion, I think a binding
>>>>>>> should be a 3-tuple element <exchange-name, queue-name, routing-key>
>>>>>>>
>>>>>> For Bindings, we'll be using queue-name, routing-key, and filters.
>>>>>> Exchange name can be inferred since we define bindings for a given
>>>>>> exchange.
>>>>>>
>>>>> +1
>>>>>
>>>>>>
>>>>>>> Also, is it correct to use the term "destination" to generalize
>>>>>>> queues and topics? AFAIK it's coming from the JMS world.
>>>>>>>
>>>>>> Yes, If we are going with a separate path for queues, outside
>>>>>> /exchanges, we can have something like /queues. Used destinations to 
>>>>>> avoid
>>>>>> the confusion with queues and topics.
>>>>>>
>>>>> Understood. +1
>>>>> I think its better to use the term "queue" if we are going to expose
>>>>> this as a AMQP broker.
>>>>>
>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> On Wed, Jan 10, 2018 at 6:29 PM, Asitha Nanayakkara <asi...@wso2.com
>>>>>>> > wrote:
>>>>>>>
>>>>>>>> Hi all,
>>>>>>>>
>>>>>>>> @Eranda: Thanks for pointing out the concern. We will be able to
>>>>>>>> get over this concern by way of following the approach suggested by
>>>>>>>> Malintha.
>>>>>>>>
>>>>>>>> @Malintha; Only concern I have with exposing GET /destinations is,
>>>>>>>> we will expose all the queues, including temporary queues created for
>>>>>>>> topics. Maybe we might be able to get over this by way of using 
>>>>>>>> filters.
>>>>>>>>
>>>>>>>> @Sanjeewa: We are planning to write this admin service using MSF4J
>>>>>>>> and we are exposing this to do administrative tasks on the broker.
>>>>>>>> Eventually the broker UI will use these servises as well. I will work 
>>>>>>>> on
>>>>>>>> creating the swagger definitions based on these suggessions.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Asitha
>>>>>>>>
>>>>>>>> On Wed, Jan 10, 2018 at 6:10 PM, Malintha Amarasinghe <
>>>>>>>> malint...@wso2.com> wrote:
>>>>>>>>
>>>>>>>>> Hi all,
>>>>>>>>>
>>>>>>>>> A suggestion for Eranda's concern, for that I think we need to
>>>>>>>>> remove the "exchanges" from the destinations APIs.
>>>>>>>>>
>>>>>>>>> One possible solution is:
>>>>>>>>>
>>>>>>>>> *Create Queue/Topic*
>>>>>>>>> POST /destinations { "name": "queueName", "durable": true,
>>>>>>>>> "autoDelete": false }
>>>>>>>>>
>>>>>>>>> *List Queues/Topics *
>>>>>>>>> GET /destinations
>>>>>>>>>
>>>>>>>>> *Get Queue Details *
>>>>>>>>> GET /destinations/{destinationName}
>>>>>>>>>
>>>>>>>>> *Delete Queue *
>>>>>>>>> DELETE /destinations/{destinationName}
>>>>>>>>>
>>>>>>>>> *New APIs for adding/retrieving bindings:*
>>>>>>>>>
>>>>>>>>> *Add a new binding: (not sure about the name "binding" is
>>>>>>>>> appropriate)*
>>>>>>>>> POST /bindings
>>>>>>>>> {
>>>>>>>>>     "exchangeName" : "exchange1",
>>>>>>>>>     "destinationName" : "destination1"
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> *Get bindings for a particular exchange:*
>>>>>>>>> GET /bindings?exchangeName="exchange1" => Provides a list of
>>>>>>>>> bindings for the particular exchange
>>>>>>>>>
>>>>>>>>> During a discussion, Asitha mentioned about default exchange; If
>>>>>>>>> exchangeName is not provided can we use it as its default value?
>>>>>>>>>
>>>>>>>>> WDYT?
>>>>>>>>>
>>>>>>>>> Thanks!
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Jan 10, 2018 at 5:59 PM, Sanjeewa Malalgoda <
>>>>>>>>> sanje...@wso2.com> wrote:
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 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}/dest
>>>>>>>>>>>> inations { "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}/destinations/{destinationName}/con
>>>>>>>>>>>> sumers
>>>>>>>>>>>> 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 <+94%2071%20306%208779>
>>>>>>>>>>
>>>>>>>>>> <http://sanjeewamalalgoda.blogspot.com/>blog
>>>>>>>>>> :http://sanjeewamalalgoda.blogspot.com/
>>>>>>>>>> <http://sanjeewamalalgoda.blogspot.com/>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Malintha Amarasinghe
>>>>>>>>> *WSO2, Inc. - lean | enterprise | middleware*
>>>>>>>>> http://wso2.com/
>>>>>>>>>
>>>>>>>>> Mobile : +94 712383306 <+94%2071%20238%203306>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> *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>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Architecture mailing list
>>>>>>>> Architecture@wso2.org
>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> *Eranda Rajapakshe*
>>>>>>> Software Engineer
>>>>>>> WSO2 Inc.
>>>>>>> Mobile : +94784822608
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *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>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> *Eranda Rajapakshe*
>>>>> Software Engineer
>>>>> WSO2 Inc.
>>>>> Mobile : +94784822608
>>>>>
>>>>> _______________________________________________
>>>>> Architecture mailing list
>>>>> Architecture@wso2.org
>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Asanka Abeyweera
>>>> Associate Technical Lead
>>>> WSO2 Inc.
>>>>
>>>> Phone: +94 712228648 <+94%2071%20222%208648>
>>>> Blog: a5anka.github.io
>>>>
>>>> <https://wso2.com/signature>
>>>>
>>>
>>>
>>>
>>> --
>>> *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>
>>>
>>>
>>> _______________________________________________
>>> Architecture mailing list
>>> Architecture@wso2.org
>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>
>>>
>>
>>
>> --
>> *Hasitha Abeykoon*
>> Associate Technical Lead; WSO2, Inc.; http://wso2.com
>> *cell:* *+94 719363063*
>> *blog: **abeykoon.blogspot.com* <http://abeykoon.blogspot.com>
>>
>>
>> _______________________________________________
>> Architecture mailing list
>> Architecture@wso2.org
>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>
>>
>
>
> --
> *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>
>
>
> _______________________________________________
> Architecture mailing list
> Architecture@wso2.org
> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>
>


-- 
Vinod Kavinda
Senior Software Engineer
*WSO2 Inc. - lean . enterprise . middleware <http://www.wso2.com>.*
Mobile : +94 (0) 712 415544
Blog : http://soatechflicks.blogspot.com/
[image: http://wso2.com/signature]
<http://wso2.com/signature>
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to