Hi,
There are a few ways you can solve this issue:
1) Build a custom component (that you can invoke from your receive pipeline’s disassemble stage) to break up your original file into separate XML messages, based on your 3000 records threshold, that can be processed by your map in the orchestration.
2) Use XLANGs and XPATH in your orchestration to construct new messages from your original message (based on the 3000 records threshold) and feed them to your map.
3) Invoke an external C# helper class from your orchestration and pass your original XML message to a class method that will break it into different messages that will be consumed again by your orchestration. You should use the Uniform Sequential Convoy design pattern in your orchestration to implement this solution.
I would recommend the 3rd approach as the solution for better maintenance and design purposes.
Best,
Daniel.