簡體   English   中英

使用 ServiceBusReceiverAsyncClient 的 Azure 服務總線不同時使用 Java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM