2010-06-30 6 views
4

Je développe un framework de test simple en Java qui doit simuler des déploiements weblogic en répondant aux appels JMS. L'une des options de configuration de test est un délai pour simuler la latence. Je me demandais si quelqu'un avait de bonnes idées sur la façon de le faire. J'étais sur le point de créer un TimerTask pour le gérer, y a-t-il un meilleur moyen? Merci.Simuler la latence en Java

Répondre

3

Vous pouvez créer un ScheduledExecutorService pour effectuer ce que vous feriez après un délai.

private final ScheduleExecutorService executor = 
    Executors.newSingleThreadScheduledExecutor(); 


// is main loop, waits between 10 - 30 ms. 
executor.schedule(new Runnable() { public void run() { 
    // my delayed task 
}}, 10 + new Random().nextInt(20), TimeUnit.MILLI_SECOND); 

EDIT: Vous pouvez utiliser le Concurrency Backport pour JDK 1.4. Cela fonctionne pour JDK 1.2 à JDK 6

+0

Ce serait probablement mon choix préféré, mais malheureusement j'utilise java 1.4. – Igman

+0

@Igman, Voir mon EDIT –

2

Que diriez-vous juste

Thread.sleep(10 + new Random().nextInt(20)); // waits between 10 - 30 ms. 

dire dans le code qui répond aux JMS que vous appelez utiliser tout cela pour simuler un temps de latence aléatoire.

+0

C'était ma pensée originale, le problème est que ceci attache le fil principal, qui n'est pas une simulation précise de notre système. Je voudrais que l'application puisse répondre au message suivant si nécessaire avant de renvoyer la réponse différée. – Igman

+0

@Igman hmmm dans ce cas, je comprends votre problème mais cela semble bizarre architecturalement. Ne créez-vous pas un nouveau thread ou n'utilisez-vous pas un pool de threads pour traiter les demandes JMS entrantes? – mikera

0

Vous pouvez planifier des travaux en utilisant Quartz, est-ce que cela résout le problème?

+0

Quartz semble être un peu trop grand pour mes besoins, principalement parce que je cherche un peu de retard. Quartz semble être plus orienté vers des tâches régulières. – Igman

3

Créez un objet qui moque le serveur. Quand il "reçoit" votre entrée, faites-lui un nouveau thread pour "gérer la connexion" comme un vrai serveur le ferait. Ce thread engendré peut Thread.sleep() au cœur de son contenu pour simuler à la fois l'envoi et le retard de réception, ainsi que vous permettre de se moquer de certaines propriétés de l'état du serveur qui pourraient être utiles lors des tests.

Questions connexes