Synchronized out
Getting results form queue from thread processing request (blockingMap variable should be returned by Spring Context as a singleton).
package com.example.configuration;
import com.jlupin.impl.client.delegator.balance.JLupinQueueLoadBalancerDelegatorImpl;
import com.jlupin.impl.client.util.JLupinClientUtil;
import com.jlupin.impl.client.util.queue.JLupinClientQueueUtil;
import com.jlupin.interfaces.client.delegator.JLupinDelegator;
import com.jlupin.interfaces.common.enums.PortType;
import com.jlupin.interfaces.microservice.partofjlupin.asynchronous.service.queue.JLupinQueueManagerService;
import com.jlupin.servlet.monitor.annotation.EnableJLupinSpringBootServletMonitor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Configuration
@EnableJLupinSpringBootServletMonitor
@ComponentScan("com.example")
public class ExampleSpringConfiguration {
@Bean
public JLupinDelegator getQueueJLupinDelegator() {
final JLupinDelegator jLupinDelegator = JLupinClientUtil.generateInnerMicroserviceLoadBalancerDelegator(PortType.QUEUE);
((JLupinQueueLoadBalancerDelegatorImpl) jLupinDelegator).setGetStatusAnalyseAndChooseHighestFromAllEnvironment(true);
return jLupinDelegator;
}
@Bean
public JLupinQueueManagerService getJLupinQueueManagerService() {
return JLupinClientUtil.generateRemote(getQueueJLupinDelegator(), "queueMicroservice", "jLupinQueueManagerService", JLupinQueueManagerService.class);
}
@Bean(name = "sampleQueueClientUtil")
public JLupinClientQueueUtil getSampleQueueClientUtil() {
return new JLupinClientQueueUtil("SAMPLE", getJLupinQueueManagerService());
}
@Bean(name = "blockingMap")
public JLupinBlockingMap getJLupinBlockingMap() {
return new JLupinBlockingMap();
}
}
Invoke and wait for result in the same thread
@Autowired
private JLupinBlockingMap blockingMap;
@Autowired
@Qualifier("sampleQueueClientUtil")
private JLupinClientQueueUtil sampleQueueClientUtil;
public void waitForResultsInTheSameThread() throws Throwable {
String taskId = jLupinClientQueueUtil.putTaskInput("sampleNativeMicroservice", "digestService", "getMD5Digest", new Object[]{ "1000", "1000" });
blockingMap.ensureBlockingContainer(taskId);
jLupinClientQueueUtil.registerFunctionOnTaskResult(taskId, new JLupinQueueReactiveFunction() {
@Override
public void onSuccess(String taskId, Object result) {
blockingMap.put(taskId, result);
}
@Override
public void onError(String taskId, Throwable th) {
throw new IllegalStateException("am error occurred for taskId:" + taskId + " caused by:", th);
}
});
Object result = blockingMap.get(taskId);
/**
* also available result = blockingMap.get(taskId, 10000, TimeUnit.MILLISECONDS);
*/
System.out.println("result = " + result + ", blocking map size:" + blockingMap.
}