These are the differences that have affected my choice in the past:
1) RabbitMQ has obvious broadcast channels.
You can send 1 message that reaches all subscribers in RabbitMQ. In
Gearman, this can be done, but not obviously, as it requires workers to
act as clients, and broadcasting clients to, subsequently, act as
workers and use the coalescing feature of Gearman.
2) Gearman's protocol is wicked efficient for "fan out".
If you want to take tiny bits of work, and distribute it amongst a
group of workers, especially if latency matters to you, Gearman is
extremely efficient at that.
3) Gearman has coalescing built in.
This is where you can just add a unique ID to a job, and if another
client submits a job with the same unique ID, you will both get the
result of a single running of that job multi-plexed to you. This is
really useful for mitigating thundering herd problems, so that only one
work unit per unique thing is pointed at your limited resource.
Another thing RabbitMQ has that gearmand does not is strong
authentication and SSL support, but I have not used this much and so I
can't comment much on it.