[rabbitmq-discuss] Prevent to deliver a message to a certain consumer
Simon MacMullen
simon at rabbitmq.com
Wed Dec 14 17:00:27 GMT 2011
Here is one approach you could use. Let's stick with the idea that
you're using routing keys for the chat room name. Furthermore each
client publishes messages with a "user" header set to the user name.
So you have some top level exchange (presumably direct or topic) for
chat room routing. When a new user comes on line, rather than just
declaring a queue and binding to that exchange, they:
* Declare a fanout exchange.
* Declare a headers exchange and bind that to the top level exchange.
The headers exchange should have its alternate-exchange set to point to
the fanout exchange.
* Declare a "junk" queue, with message TTL 0, and bind this to their
headers exchange with arguments ["user": <their username>].
* Declare a "message" queue and bind this to the fanout exchange.
So when they publish a message it goes to the headers exchange. This
routes it to the junk queue where it expires immediately.
When someone else publishes a message it goes to the headers exchange.
This can't route it, which makes it go to the alternate fanout exchange.
This then routes it to the message queue.
The key point is the use of alternate-exchange for negation.
It's a tiny bit fiddly though, so an alternate approach would be to
write your own exchange type.
Cheers, Simon
On 14/12/11 14:18, bill_martin at freenet.de wrote:
> Hi,
>
> I am writing an application which allows users to communicate with each
> other via RabbitMQ.
>
> Each user-application contains a producer and a receiver to publish or
> receive messages to/from a direct exchange. Each user can bind to a
> "chat-room".
>
> Imagine two users (UserA and UserB). UserA binds to "chatRoom1" and
> UserB binds to "chatRoom1".
>
> If UserA publishes a message in "chatRoom1" the consumer of the
> user-application from UserB and the consumer of the user-application
> from UserA gets the message.
>
> I want to prevent that a user gets his own messages to reduce network
> traffic.
>
> Is it possible?
>
> Thanks in advance for your help!
>
> Kind regards,
>
> Bill
>
>
>
> ---
> *E-Mail ist da wo du bist!* Jetzt mit freenetMail ganz bequem auch
> unterwegs E-Mails verschicken.
> Am besten gleich informieren unter
> http://mail.freenet.de/mobile-email/index.html
>
>
>
> _______________________________________________
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
> https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
--
Simon MacMullen
RabbitMQ, VMware
More information about the rabbitmq-discuss
mailing list