4.11.3. 最后值队列行为示例
此示例显示了最后一个值队列的行为。
在 broker.xml
配置文件中,假设您添加了类似如下的配置:
<address name="my.address"> <multicast> <queue name="prices1" last-value-key="stock_ticker"/> </multicast> </address>
上述配置创建一个名为 price 1
的队列,其最后一个值键为 stock_ticker
。
现在,假设客户端发送两条消息。每一消息对属性 stock_ticker
具有相同的 ATN
值。每条消息对名为 stock_ price 的属性具有不同的值。
每条消息都发送到同一队列 price 1
。
TextMessage message = session.createTextMessage("First message with last value property set"); message.setStringProperty("stock_ticker", "ATN"); message.setStringProperty("stock_price", "36.83"); producer.send(message);
TextMessage message = session.createTextMessage("Second message with last value property set"); message.setStringProperty("stock_ticker", "ATN"); message.setStringProperty("stock_price", "37.02"); producer.send(message);
当对 stock_ticker
last value 键(本例中为 ATN
)具有相同值的两个消息到达 price 1 队列
时,只有最新的消息保留在队列中,其中第一条消息将被清除。在命令行中,您可以输入以下行来验证此行为:
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000); System.out.format("Received message: %s\n", messageReceived.getText());
在本示例中,您看到的输出是第二条消息,因为两条消息对最后一个值键都使用相同的值,而且第一个消息之后的队列中收到第二条消息。