
|
If you were logged in you would be able to see more operations.
|
|
|
Mule
Created: 17/Sep/07 04:43 AM
Updated: 17/Jan/08 09:03 AM
|
|
| Component/s: |
Transport: VM
|
| Affects Version/s: |
2.0.0-M1,
1.4.0,
1.4.1,
1.4.2,
1.4.3,
2.0.0-M2,
2.0.0-RC1,
1.4.4
|
| Fix Version/s: |
2.0.0-RC2,
1.4.4
|
|
|
Issue Links:
|
Related
|
|
|
|
This issue relates to:
|
|
MULE-1688
VM Transport slow in 1.4 when queueEvents = "true"
|
|
|
|
|
MULE-2781
VMMessageReceiver polls unnecessarily when queueEvents is false
|
|
|
|
|
|
|
| Labels: |
|
| User impact: |
High
|
Currently the VMMessageReceiver inherits TransactedPollingMessageReceiver. Polling message receivers are really only necessary for transports for which picking up a message is "expensive"; since this transport is local to the same JVM, this condition does not hold; unfortunately this also prevents the VM receiver from being used in configurations where many in-VM events must be received rapidly, since the polling is controlled by the connector's scheduler (which is the right thing to do for all other transports, VM is just the exception to the default rule). Note that this was also true in 1.3.
The emergency fix in MULE-1688 works fine but was only a workaround: similar to JMS XA polling, polling workers are regularly triggered by the scheduler but not if they are already polling/busy, in which case the scheduler thread immediately returns.
The "real" solution would be to make VMMessageReceiver work in a similar fashion to the rewritten non-XA JMS receiver. See my comment on MULE-1688 why I haven't done that yet.
|
|
Description
|
Currently the VMMessageReceiver inherits TransactedPollingMessageReceiver. Polling message receivers are really only necessary for transports for which picking up a message is "expensive"; since this transport is local to the same JVM, this condition does not hold; unfortunately this also prevents the VM receiver from being used in configurations where many in-VM events must be received rapidly, since the polling is controlled by the connector's scheduler (which is the right thing to do for all other transports, VM is just the exception to the default rule). Note that this was also true in 1.3.
The emergency fix in MULE-1688 works fine but was only a workaround: similar to JMS XA polling, polling workers are regularly triggered by the scheduler but not if they are already polling/busy, in which case the scheduler thread immediately returns.
The "real" solution would be to make VMMessageReceiver work in a similar fashion to the rewritten non-XA JMS receiver. See my comment on MULE-1688 why I haven't done that yet. |
Show » |
|
previously:
msgs/sec: 74
msgs/sec: 93
msgs/sec: 93
msgs/sec: 93
msgs/sec: 93
msgs/sec: 93
msgs/sec: 93
msgs/sec: 93
msgs/sec: 93
msgs/sec: 93
now:
msgs/sec: 3232
msgs/sec: 8000
msgs/sec: 9416
msgs/sec: 8635
msgs/sec: 8000
msgs/sec: 7112
msgs/sec: 8650
msgs/sec: 8896
msgs/sec: 9398
msgs/sec: 9416
This is with queueEvents=true, still polling and transparently integrated into the current code with minimal changes. Also now has much better concurrency (uses the receiver's workManager correctly); throughput is achieved by message batching, though without stalling for single messages or slamming the threadpool too hard in case too many messages are queued.