Uploaded image for project: 'UIMA'
  1. UIMA
  2. UIMA-5385

UIMA-AS: add support for targeting specific service instance via JMS

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 2.10.2AS
    • Async Scaleout
    • None

    Description

      With multiple service instances getting messages from a shared JMS queue there is no way to know which instance gets a particular message. By design, the JMS queue provides natural load balancing and a broker routes a message to a service which has capacity (ready thread) to process it.

      Targeting services would support interesting use cases. For example, sending a message to a specific service instance could be used to determine if the service is viable or not. Targeted messages can also be considered of high processing priority and processed ahead of 'normal' priority messages.

      JMS supports targeting with selectors. A message listener is configured to indicate which messages it wants to receive. The selection is based on a value of a JMS property included in a message. The JMS selector syntax is based on SQL 92 spec which allows for compound expressions that include: AND, OR, NOT, etc. The message selection is done by the broker not the consumer. The broker will route messages to a consumer whose selector matches property values in a message.

      Current UIMA-AS already supports two selectors, one for handling Process requests and the other for GetMeta. Each of these has a dedicated listener and thread(s) to process messages. The proposal is to add yet another listener with a new selector to support targeting. The service selector value can be user defined via -DHighPriorityServiceId=XXX. If the -D is not present, the UIMA-AS will create a new listener with a selector = [Node IP: PID] which would uniquely identify a service.

      It would be up to the client application to determine value for the targeting string (selector). The UIMA-AS client will provide a way for an application to specify targeting string via a Map which is passed into the initialize( ) method of the UIMA-AS client. This would allow for pinning a client to a specific service instance. All messages from the client would be processed by that service. If targeting string is not present, targeting will not be enabled and messages will be processed by an arbitrary service instance.

      As mentioned, targeted messages will have a high priority and will be processed first. A new java priority queue will be added to the UIMA-AS service to enable sorting of messages according to the priority.

      Attachments

        Activity

          People

            cwiklik Jaroslaw Cwiklik
            cwiklik Jaroslaw Cwiklik
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: