मेरे पास लागू करने के लिए निम्नलिखित परिदृश्य है। उपयोगकर्ता आईडी द्वारा नौकरियों की सूची प्राप्त करें, नौकरियों को पुनरावृत्त करें और फिर विशेषता द्वारा खाता प्रविष्टि प्राप्त करें और अंत में खाते में अपडेट करें।

विधि परिभाषा

Mono<Void> execute(List<String> users)

जॉब्स दाओ मोनो लौटा रहा है<सूची>

Mono<List<JobInfo>> getJobsByUser(String user)
class JobInfo {
   String user;
   String account;
}

खाता प्राप्त करना मोनो सूची लौटा रहा है,

Mono<List<Account>> getAccounts(String account)

मैं मोनो नो ब्लॉकिंग तरीके का उपयोग करके ऐसा करने के लिए संघर्ष कर रहा हूं। मैंने ब्लॉक का उपयोग करके ऐसा करने की कोशिश की लेकिन हो रही है

block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-
public Mono<Void> execute(List<String> users) {
   users.forEach(user -> {
    jobDao.getJobsByUser(user).block().stream().forEach(job -> {
      accountDam.getAccounts(job.getAccount()).block().forEach(acc -> {
        // update account
      });
    });
   
   });

   return Mono.empty().then();

}
-2
Delantha 2 अक्टूबर 2021, 18:06
I tried to use Flux and iterate users to get accounts. But method is finish executing before running this. कोड कहां है? हम आपके लिए कोड नहीं लिखेंगे और आपका काम नहीं करेंगे, क्या उसमें सीखने का अनुभव था?
 – 
Toerktumlare
2 अक्टूबर 2021, 20:25
मैं क्षमाप्रार्थी हूं। मैंने कोड के साथ प्रश्न अपडेट किया।
 – 
Delantha
2 अक्टूबर 2021, 21:45
आपका दृष्टिकोण प्रतिक्रियाशील होने के बजाय अधिक अनिवार्य है। block() पद्धति के उपयोग के बिना इसे फिर से लागू करने का प्रयास करें। यह आपकी मदद कर सकता है: projectreactor.io/docs/core/release/reference/ #कौन सा-ऑपरेटर
 – 
lkatiforis
2 अक्टूबर 2021, 22:11
मेरा सुझाव है कि स्टैक ओवरफ्लो के बारे में पूछने से पहले आप रिएक्टर दस्तावेज़ीकरण में "आरंभ करना मार्गदर्शिका" देखें।
 – 
Toerktumlare
3 अक्टूबर 2021, 01:39

1 उत्तर

सबसे बढ़िया उत्तर

जहाँ तक मैं समझ सकता हूँ, आपको निम्नलिखित प्रवाह की आवश्यकता है:

public Mono<Void> execute(List<String> users) {
    return Flux.fromIterable(users)
        .flatMap(user -> getJobsByUser(user))
        .flatMapIterable(jobs -> jobs)
        .flatMap(job -> accountDam.getAccounts(job.getAccount()))
        .flatMapIterable(accounts -> accounts)
        .flatMap(account -> updateAccount(account))
        .then();
}
0
Martin Tarjányi 2 अक्टूबर 2021, 22:15