We often come under such situation when we receive message
from source system which are not in proper sequence but target system need to receive
that in proper sequence. To resolve this we need to re-sequence the messages and
process them in proper sequence. Re-sequencing is term used when we need to
process incoming messages in sequence which are not coming in proper sequence. Design
and developer need to think on this re-sequencing when they encounter such
requirement as e described above. E.g. suppose we are receiving sales orders
from source system, sales order contain one field with the name sales order
number, suppose source system sends sales order in this sequence ( 1,
4,3,2,5,6,7 ) but target system need sales order in this sequence
(1,2,3,4,5,6,7) , in this case we need to do re-sequencing of message.
In 11g version of Oracle SOA Suite, re-sequencing was
there in Mediator component but this feature was not available for BPEL and
Service Bus. In 12c release, this feature is provided for service bus. We can
set this feature either at pipeline level or at operation level. In this post,
we will discuss on that. We will only discuss about pipeline level
re-sequencer.
We have three types of re-sequencing in Service Bus.
Standard: This sequencer is used when incoming message
contain numeric identifier. This numeric
identifier is termed as Sequence Id. We may specify message Group also, that
means incoming order can be Sales Order or purchase order, in this case we will
have separate group for both Sales Order and purchase order. When source system
send out of order messages then it store out-of-order message until complete
order is received this is based on sequence Id.
FIFO:
This sequencer works based on message arrival time. Whichever message received first,
will be processed first. Here you need to specify only Group. So all the
messages which are there in one group processed based on message receive time.
Best
Effort: It is
used when we receive large number of messages in a short period of time and
cannot provide information to the re-sequencer about the identifier to use for
sequencing. Typically, the identifier used for sequencing in such scenarios is
of a dateTime type or numeric type.
To configure re-sequencer in service bus, double click on
the pipeline and choose configuration tab. Click on resequencer, to enable the
resequencer check the “Enable Resequencer” checkbox. Once you enable the
resequencer, you need to choose the resequencer level. Resequencer level can be
set either pipeline or operation. Also choose the type of resequencer which you
need to use.
If you choose to use standard resequencer then you need
to provide values for sequence id and group. Only sequence id is mandatory for
you can skip group for this sequencer, empty group value means all the incoming
messages will be in one group only. Sequence
id is of numeric type. You can also set resequencer start counter and increment
counter. We can also specify message expiry time by setting Timeout value. When
we set Timeout as 0, that means messages will never expire.
For FIFO, we need to set only Group and that is also
option. So when we choose FIFO resequencer, all the messages are processed
based on their arrival time.
0 comments :
Post a Comment