비동기 테스트 추가

This commit is contained in:
현성필
2024-12-30 19:01:12 +09:00
parent 4c6689db83
commit 0c93e76be6
23 changed files with 1180 additions and 59 deletions
@@ -0,0 +1,78 @@
package com.eactive.testmaster.config;
import static javax.script.ScriptContext.GLOBAL_SCOPE;
import com.hazelcast.collection.IQueue;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.scheduledexecutor.IScheduledExecutorService;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.SimpleBindings;
import org.apache.commons.lang3.function.TriFunction;
import org.springframework.stereotype.Service;
@Service
public class HazelcastJSBridge {
private final HazelcastInstance hazelcastInstance;
private final IScheduledExecutorService scheduledExecutor;
public HazelcastJSBridge(HazelcastInstance hazelcastInstance) {
this.hazelcastInstance = hazelcastInstance;
this.scheduledExecutor = hazelcastInstance.getScheduledExecutorService("delayed-queue-executor");
}
/**
* Creates bindings for Hazelcast operations that can be used in JavaScript
*/
public Bindings createHazelcastBindings() {
Bindings bindings = new SimpleBindings();
bindings.put("tmOfferToQueue", (java.util.function.BiFunction<String, Object, Boolean>)
(queueName, item) -> {
IQueue<Object> queue = hazelcastInstance.getQueue(queueName);
return queue.offer(item);
});
bindings.put("tmPollFromQueue", (java.util.function.Function<String, Object>)
queueName -> {
IQueue<Object> queue = hazelcastInstance.getQueue(queueName);
return queue.poll();
});
bindings.put("tmScheduleToQueue", (TriFunction<String, Object, Integer, Boolean>)
(queueName, item, delaySeconds) -> {
try {
scheduledExecutor.schedule(
() -> {
IQueue<Object> queue = hazelcastInstance.getQueue(queueName);
queue.offer(item);
},
delaySeconds,
TimeUnit.SECONDS
);
return true;
} catch (Exception e) {
return false;
}
});
// Utility operations
bindings.put("tmGetDistributedObjects",
(java.util.function.Supplier<Collection<?>>)
() -> hazelcastInstance.getDistributedObjects());
return bindings;
}
/**
* Enhances the JavaScript engine with Hazelcast capabilities
*/
public void enhanceEngine(ScriptEngine engine) {
engine.setBindings(createHazelcastBindings(), GLOBAL_SCOPE);
}
}
@@ -0,0 +1,39 @@
package com.eactive.testmaster.config;
import com.hazelcast.config.Config;
import com.hazelcast.config.NetworkConfig;
import com.hazelcast.config.QueueConfig;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TestMasterHazelcastConfig {
@Bean
public Config hazelcastConfig() {
Config config = new Config();
config.setInstanceName("hazelcast-instance");
// Configure network
NetworkConfig network = config.getNetworkConfig();
network.setPort(5701);
network.setPortAutoIncrement(true);
// Configure queue
QueueConfig queueConfig = new QueueConfig();
queueConfig.setName("taskQueue");
queueConfig.setMaxSize(1000);
queueConfig.setBackupCount(1);
config.addQueueConfig(queueConfig);
return config;
}
@Bean
public HazelcastInstance hazelcastInstance(Config config) {
return Hazelcast.newHazelcastInstance(config);
}
}