[英]Azure service bus using ServiceBusReceiverAsyncClient not consuming concurrently Java
我正在使用ServiceBusReceiverAsyncClient
創建 Azure 服務總線偵聽器,以便像這樣處理來自 Azure 服務總線隊列的消息(ASB 類):
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.build();
// Create an instance of the processor through the ServiceBusClientBuilder
ServiceBusReceiverAsyncClient asyncClient = new ServiceBusClientBuilder()
.credential(credential)
.connectionString(connectionString)
.receiver()
.queueName(queueName)
.buildAsyncClient();
Disposable subscription = asyncClient.receiveMessages()
.subscribe(ASB::processMessage,
ASB::processError,
() -> System.out.println("Receiving complete."));
private static void processMessage(ServiceBusReceivedMessage message) {
System.out.println("Processing message.");
System.out.printf("Processed message. Session: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(),
message.getSequenceNumber(), message.getBody());
}
我有一個工具可以將幾千條消息發送到服務總線隊列,這樣我就可以測試它是否在異步處理消息。 但是,這是我在日志中看到的:
Processing message.
Processed message. Session: 3151fe4ef7734ea19658bcb3459d4cea, Sequence #: 2945. Contents: test 330
2022-12-14 18:51:11.379 INFO 91776 --- [oundedElastic-2] c.a.m.s.i.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
Processing message.
Processed message. Session: a304b4fbf379436e8c0e95c5a2a8ec00, Sequence #: 2946. Contents: test 331
2022-12-14 18:51:11.545 INFO 91776 --- [oundedElastic-2] c.a.m.s.i.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
Processing message.
Processed message. Session: b2ca6cd5dc1a456d99eb469c2de37090, Sequence #: 2947. Contents: test 332
2022-12-14 18:51:11.638 INFO 91776 --- [oundedElastic-2] c.a.m.s.i.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
Processing message.
Processed message. Session: 39decd757a544fb09aecf62f11deef3d, Sequence #: 2948. Contents: test 333
2022-12-14 18:51:11.765 INFO 91776 --- [oundedElastic-2] c.a.m.s.i.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
Processing message.
Processed message. Session: 79bb1a6adaa542448075868ec190b7dd, Sequence #: 2949. Contents: test 334
2022-12-14 18:51:11.881 INFO 91776 --- [oundedElastic-2] c.a.m.s.i.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
Processing message.
Processed message. Session: e891896a85a548968de904f3ee6f07a0, Sequence #: 2950. Contents: test 335
2022-12-14 18:51:12.008 INFO 91776 --- [oundedElastic-2] c.a.m.s.i.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
Processing message.
Processed message. Session: b0326bcc0ebd40b2b32d9e9ceb88d965, Sequence #: 2951. Contents: test 336
2022-12-14 18:51:12.121 INFO 91776 --- [oundedElastic-2] c.a.m.s.i.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
Processing message.
Processed message. Session: b55d635672c449ec924d2121bb8575b8, Sequence #: 2952. Contents: test 337
2022-12-14 18:51:12.268 INFO 91776 --- [oundedElastic-2] c.a.m.s.i.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
Processing message.
我不確定我是否可以得出結論,但看起來代碼正在按順序處理消息,一條接一條,這意味着它是同步進行的。 我還嘗試使用Thread.sleep(10000)
來查看ServiceBusReceiverAsyncClient
是否為每條消息生成一個新進程,但它似乎是在一個線程上處理。
我想念任何東西嗎? 或者是否有像 c# 這樣的配置,我必須設置它才能同時處理? 任何幫助都會很棒!
我相信您將異步與並發混為一談。 接收方返回您訂閱的單個消息流。 Flux 從這個流中一對一地發送消息,等待你的processMessage
函數返回。 訂閱是異步的,因為它不會阻塞調用receiveMessages
的線程。
我相信您可能正在尋找的是ServiceBusProcessorClient ,它為您管理並發。 它允許在構建時設置maxConcurrentCalls 。
Java 的ServiceBusProcessorClient
等同於.NET 的ServiceBusProcessor
類型——這是您提到的“C# 中的配置”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.