我正在尝试接收来自队列的消息,并尝试了不同的方法,并面临性能问题。以下是每种运行类型的度量标准:
以下是我的代码供参考:
ServiceBusSessionReceiverClient sessionReceiverClient = new ServiceBusClientBuilder()
.connectionString(System.getenv("QueueConnectionString"))
.sessionReceiver()
.maxAutoLockRenewDuration(Duration.ofMinutes(2))
.receiveMode(ServiceBusReceiveMode.PEEK_LOCK)
.queueName(queueName)
.buildClient();
ServiceBusReceiverClient receiverClient = sessionReceiverClient.acceptSession(System.getenv("QueueSessionName"));
ObjectMapper objectMapper = new ObjectMapper();
do {
receiverClient.receiveMessages((int) prefetchCount).stream().forEach(message -> {
try {
String str = message.getBody().toString();
final T dataDto = objectMapper.readValue(message.getBody().toString(), returnType);
dataDtoList.add(dataDto);
receiverClient.complete(message);
} catch (Exception e) {
AzFaUtil.getLogger().severe("Message processing failed. Error: " + e.getMessage() + e + "\n Payload: "
+ message);
}
});
} while (dataDtoList.size() < numberOfMessages);
receiverClient.close();
sessionReceiverClient.close();我能想到的可能的解决办法:
注意:这个API需要是同步的。我刚刚实验了1000个条目,但是我正在处理30000个条目,所以性能很重要。此外,队列已启用会话,也支持分区的。
发布于 2021-10-19 17:28:27
按照本期的说法,微软还没有测试他们ServiceBus的性能。由于FIFO (先进先出)是我的消息队列的一个要求,所以我使用JMS,它平均执行速度快10倍,但也有一个缺点。目前,JMS不支持基于会话的队列,因此我不得不禁用会话,然后为了确保FIFO,我还必须禁用队列上的分区。这是一个部分和临时的解决方案,以获得更好的性能,直到微软提高其ServiceBusRecieverClient的性能或启用JMS上的会话为止。
https://stackoverflow.com/questions/68930028
复制相似问题