There is a very interesting thread (Command Server Gotcha) in this forum that revolves around the Quality of Service (QoS) of a message based Service. In this case, the Service is provided by the IBM MQ Command Server. Services are requested via PCF command messages being placed into a queue (SYSTEM.ADMIN.COMMAND.QUEUE). Replies are sent to the "Reply To" queue specified in the message.
There is no formal specification for this "Service" in the IBM Knowledge Center (KC). The KC does recommend using non-persistent messages to invoke the Service. The reply messages generated by the Service are also non-persistent. To me, this indicates a fairly "low" QoS:
- Maybe the Service will receive the request (or maybe not).
- If the Service receives your request, it will produce one or more reply messages.
- The Requestor will not know, in advance, the number of response messages.
- Maybe the Reply messages will be delivered (or maybe not).
- Maybe the Request was executed successfully (or maybe not).
None of these actions is guaranteed. The Service is designed to potentially discard Reply messages and encourages disposable Request messages. The Service invocation is asynchronous, so the Service Requester is never assured of knowing the result of the invocation. This is what I mean by a low QoS.
That thread talked about "Defensive" programming, but the recommendations are really about understanding and programming for the specified QoS. So, how do we document this QoS?
API Connect (APIC) is designed to handle HTTP based Service requests (HTTP or SOAP). In other words, APIC is designed to only be able to handle synchronous Services. Where are we supposed to put the asynchronous Service specifications? If not in APIC, then where?
The ironic part of this discussion is that the Cloud based Microservices community has been trying to minimize the problems with a network of tightly-coupled synchronous RPC calls (e.g. HTTP/SOAP). The current design is to create "Circuit Breakers" and "Bulkheads" to minimize the consequences of API failures. At the very cutting edge of Microservices design, folks are beginning to talk about asynchronous communications as the NEXT BIG THING.
The messaging community hasn't been very tightly integrated with the Service (now API) management community. Perhaps it's time start?
Regards,
Glen Brumbaugh
IBM Champion (Cloud)