You do not want a message queue, you want a key-value database. For instance you could use Redis or Tokyo Tyrant to get a simple network-accessible key-value database. Or just use a memcache.
Each message type is a key. When you write a new message with the same key, it overwrites the previous value so the reader of this database will never be able to get out of date information.
At this point, you only need a message queue to establish the order in which keys should be read, if that is important. Otherwise, just continually scan the database. If you do continually scan the database, it is best to put the database near the readers to reduce network traffic.
I would probably do something like this
key: typecode
value: lastUpdated, important data
Then I would send messages that contain
typecode, lastUpdated
That way the reader can compare lastupdated for that key to the one that they last read from the database and skip reading it because they are already up to date.
If you really need to do this with AMQP, then use RabbitMQ and a custom exchange type, specifically a Last Value Cache Exchange. Example code is here https://github.com/squaremo/rabbitmq-lvc-plugin
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…