跳到主要内容

使用Java API浏览队列

队列浏览允许您的客户端应用程序查看队列中的保证消息,从最旧到最新,而不会从队列中移除它们。您可以选择性地从队列中移除浏览过的消息,或者根据需要保留它们。有关更多信息,请参阅浏览保证消息。以下步骤解释了如何使用 Java API 设置队列浏览器。

  1. 使用 MessagingService 对象创建一个 MessageQueueBrowser 对象,然后调用 start() 方法将您的队列浏览器连接到事件代理:
final MessageQueueBrowser queueBrowser = messagingService
.createMessageQueueBrowserBuilder().build(queueToBrowse).start();
  1. 通过调用 receiveMessage() 方法与队列浏览器对象一起浏览队列上持久化的消息:
final InboundMessage message = queueBrowser.receiveMessage(timeout); // timeout 是 receive() 方法在退出前阻塞的时间(以毫秒为单位)。
  1. 您可以使用队列浏览器对象通过 remove() 方法从事件代理队列中移除消息:
queueBrowser.remove(message);
  1. 您可以使用 withMessageSelector() 方法仅浏览队列上与用户指定的消息属性匹配的消息:
final String filterSelectorExpression = "myMessageProperty01 = 'someValue' AND myMessageProperty02 = 'someValue'";
final MessageQueueBrowser queueBrowser = messagingService
.createMessageQueueBrowserBuilder().withMessageSelector(filterSelectorExpression)
.build(queueToBrowse).start();

final InboundMessage message = browser.receiveMessage(timeout); // 只有与选择器表达式匹配的消息属性的消息才会被接收。

以下示例代码展示了如何浏览队列:

package com.solace.sampler;

import com.solace.messaging.MessagingService;
import com.solace.messaging.receiver.InboundMessage;
import com.solace.messaging.receiver.MessageQueueBrowser;
import com.solace.messaging.resources.Queue;

public class HowToBrowseAQueue {

public static void startMessageQueueBrowser(MessagingService service, Queue queueToBrowse) {
final MessageQueueBrowser receiver = service
.createMessageQueueBrowserBuilder().build(queueToBrowse).start();
}

public static void browseQueue(MessagingService service, Queue queueToBrowse, long timeout) {
final MessageQueueBrowser browser = service
.createMessageQueueBrowserBuilder().build(queueToBrowse).start();

final InboundMessage message = browser.receiveMessage(timeout);
}

public static void browseAndRemoveFromQueue(MessagingService service, Queue queueToBrowse, long timeout) {
final MessageQueueBrowser browser = service
.createMessageQueueBrowserBuilder().build(queueToBrowse).start();

final InboundMessage message = browser.receiveMessage(timeout);
// 可以请求从队列中移除消息
browser.remove(message);
}

public static void browseQueueUsingMessageSelector(MessagingService service, Queue queueToBrowse, long timeout) {
final String filterSelectorExpression = "myMessageProperty01 = 'someValue' AND myMessageProperty02 = 'someValue'";
final MessageQueueBrowser browser = service
.createMessageQueueBrowserBuilder().withMessageSelector(filterSelectorExpression)
.build(queueToBrowse).start();

// 只有与选择器表达式匹配的消息属性的消息才会被接收
final InboundMessage message = browser.receiveMessage(timeout);
}
}