In RPC the method invoker waits for the method to finish implementation and return the control back to the invoker. Therefore it is completely synchronous in nature. Whereas in JMS the message sender just sends the message to the destination and continues its own processing. The sender does not want to wait for the receiver to respond. This is asynchronous behavior.