I found using DD in cluster environment messaging is much slow than using plain destination.
Is that normal?
After creating a queue sender, if the queue supplied at creation time was a distributed queue, then each time a message is produced using the sender a decision is made as to which queue member will receive the message. Each message is sent to a single physical queue member.
The message is not replicated in any way. As such, the message is only available from the queue member where it was sent. If that physical queue becomes unavailable before a given message is received, then the message is unavailable until that queue member comes back online.
It is not enough to send a message to a distributed queue and expect the message to be received by a queue receiver of that distributed queue. Since the message is sent to only one physical queue member, there must be a queue receiver receiving or listening on that queue member.
Your observation about WLS JMS DD is basically correct (except that I am not sure if the performance statement is correct).
Yes, messages that are on a member that is temporarily down will not be available for consumption. The recommendation is to target your JMS servers to a migrable target. The member will be migrated to an active WLS server is the original hosting server fails.
Oracle's recommendation for consuming from a DD is to use WLS MDB or SOA JMS Adapter. Those containers transparently consume from all members of a DD while handling connection pooling, security and transactions.
You can find the details about using WL S MDB at