cancel
Showing results for 
Search instead for 
Did you mean: 

EOIO Dynamic Queue

Former Member
0 Kudos

Hi Experts,

We are working on SAP PO 7.4 SP11.

Standard EOIO configuration in PI used hardcoded queue name. This mean only one queue will be used for that interface. This limitation has been overwritten by implmenting dynamic queue through custom program development.

With the help of blogs on SDN, We have implemented dynamic generation of EOIO queues.

This is done for sales order data interface.

These dynamic queues will be created uniquely order ID wise. Order ID will be extracted from the payload and queues will be created accordingly for first order update only. So any subsequent order update coming through this will flow to respective order queue only.

So, Each order will have its own EOIO queue.

As per the current volume expected for order is 3000 orders per day, It will lead to generation of 3000 dynamic queues in PI system on daily basis. The queues will keep on growing.

I need answer to following questions:

1.    How the queue growth will impact the performance of the SAP PO 7.4 system, as the queue keeps growing.

2.    What is the limitation of SAP PI system for Active and Passive queues in numbers.

3.    How the queue management can be addressed, Using any specific tools or direct deletion from database, etc

4.    Is it design feasible from PI performance perspective?

Any help will be appreciated.

Thank You.

Regards,

Ajit

Accepted Solutions (1)

Accepted Solutions (1)

vadimklimov
Active Contributor
0 Kudos

Hi Ajit,

In contrast to ABAP qRFC queues where number of registered and actively used queues matters, EOIO queues in Advanced Adapter Engine (AAE) can be thought as a named serialization context to which a message with QoS = EOIO is assigned, there is no "physical" queue in AAE that would store EOIO messages. Scenario described by  you is quite common requirement when dealing with interfaces processing updates for transactional data and can be finely handled by AAE of PO.

Having above statements in mind, here are comments on your questions:

1. As said earlier, amount of EOIO queues is not as critical in AAE (Java), as it would have in Integration Engine (ABAP), so it is acceptable to have many EOIO queues.

2. There is no difference between active and passive EOIO queues in AAE - actually, EOIO in AAE doesn't have such characteristic as active or passive. When incoming message with QoS = EOIO is created and passed to Messaging System, it is assigned to a specific sequence ID (which then becomes a part of serialization context name). Messaging System stores an array of non-processed EOIO message GUIDs, serialization contexts to which they were assigned and their sequence numbers within those serialization contexts and a special sequencer service than makes decision about which message can be dispatched for further processing. These sequence tables are very lightweight and don't consume much memory. When all messages assigned to some serialization context, are processed, sequence table will simply not contain any entries for that serialization context - that's it. So there is no really any technical restriction or limitation on amount of EOIO queues in AAE.

3. Backlog of EOIO messages per communication component and serialization context can be checked in PIMON > Adapter Engine Status. You can also use PIMON > Message Monitor and extend standard layout with fields for sequence ID (or alternatively serialization context) and sequence number so that for every displayed EOIO message, you will see information regarding to which sequence ID / serialization context it is assigned and how many preceding messages are still not processed from the same EOIO queue.

4. Yes.

Regards,
Vadim

Former Member
0 Kudos

Hi Vadim,

Thank you for your reply.

As per your comments,

1. If all the messages in EOIO queue are processed successfully, then sequence table won't contain any entry against that queue.

Say, In a day 10 messages are processed successfully for sales order 'ABC' through a dynamically generated EOIO queue. so the sequence ID of the last message processed would be 10. So next day if any message flows for order 'ABC' than sequence id for that message would be 1 or 11 ?

If it is 11, then somewhere the sequence entry is stored in the Database for the queue.

Regards,

Ajit

vadimklimov
Active Contributor
0 Kudos

Hi Ajit,

Correct, in-memory sequence table that is used by sequencer service of Messaging System, will not contain any entries in a case described by you since all preceding messages from the same serialization context have been processed successfully.

In your described situation, the message will get sequence number = 11. In order to keep consistency, next sequence number for the given serialization context is produced and assigned to a newly processed EOIO message based on sequence number used for the last previous message in the same serialization context. This data is stored in database table BC_MSG_SEQ_NBR. When a new message is created for a given serialization context, current sequence number for that serialization context is retrieved from a mentioned table, a value is iterated by 1, iterated value is assigned as a sequence number for the created message and corresponding table entry in table BC_MSG_SEQ_NBR is updated with an iterated sequence number. Select from BC_MSG_SEQ_NBR is fast enough, since a required record entry is accessed by its primary key (field CTX_HASH - which is an MD5 hash value of serialization context).

Regards,

Vadim

Answers (0)