有没有更好的方法来跟踪订阅者的变化?
Is there any better way to track subscriber changes?
假设我们有一个 Client
class 方法将消息发送到服务器队列。它还订阅了队列,当服务器收到来自任何已注册客户端的新消息时,服务器将向所有客户端发回通知:
public class Client {
public void sendMessage(String message) {
// Method to send messages to server
}
public void messageDelivered(String receivedMessage) {
// This is a method subscribed successfull message delivering
}
}
在另一个 class 中,我想实例化我的客户端,发送一条消息并检查它是否发送成功:
public class ParentClass {
protected boolean checkConnection() {
Client client = new Client(); // Lets skip all configuration and connection details
String testMessage = "Test message";
client.sendMessage(testMessage);
// Check that messageDelivered() was called in client with testMessage parameter
return result;
}
}
检查 messageDelivered()
是否在父 checkConnection()
方法中被异步调用的最佳方法是什么?
我看到了在客户端 class 中创建标志的简单解决方案,在传递消息时更新它,并在父 class 中的某个受时间限制的循环中包装对该标志的检查。但是这个选项对我来说看起来很脏。也许 Java SDK 中有一些更好的做法或 "watchers"?
也许是这样的?
public class Client {
private Runnable runnable;
public void sendMessage(String message, Runnable runnable) {
// Method to send messages to server
this.runnable = runnable;
}
public void messageDelivered(String receivedMessage) {
// This is a method subscribed successfull message delivering
this.runnable.run();
}
}
然后在您的 ParentClass
中创建一个 Runnable
并将其传递给客户端。
public class ParentClass {
protected boolean checkConnection() {
Client client = new Client(); // Lets skip all configuration and connection details
String testMessage = "Test message";
// Check that messageDelivered() was called in client with testMessage parameter
MyRunnable runnable = new MyRunnable();
client.sendMessage(testMessage, runnable);
try {
runnable.wait( 10000 ); // Wait for 10 seconds
} catch( InterruptedException e ) {
e.printStackTrace();
}
return runnable.getResult();
}
}
可运行class:
public class MyRunnable implements Runnable {
private boolean result;
public MyRunnable( ) {
this.result = false;
}
@Override
public void run( ) {
this.result = true;
this.notifyAll();
}
public boolean getResult( ) {
return this.result;
}
}
假设我们有一个 Client
class 方法将消息发送到服务器队列。它还订阅了队列,当服务器收到来自任何已注册客户端的新消息时,服务器将向所有客户端发回通知:
public class Client {
public void sendMessage(String message) {
// Method to send messages to server
}
public void messageDelivered(String receivedMessage) {
// This is a method subscribed successfull message delivering
}
}
在另一个 class 中,我想实例化我的客户端,发送一条消息并检查它是否发送成功:
public class ParentClass {
protected boolean checkConnection() {
Client client = new Client(); // Lets skip all configuration and connection details
String testMessage = "Test message";
client.sendMessage(testMessage);
// Check that messageDelivered() was called in client with testMessage parameter
return result;
}
}
检查 messageDelivered()
是否在父 checkConnection()
方法中被异步调用的最佳方法是什么?
我看到了在客户端 class 中创建标志的简单解决方案,在传递消息时更新它,并在父 class 中的某个受时间限制的循环中包装对该标志的检查。但是这个选项对我来说看起来很脏。也许 Java SDK 中有一些更好的做法或 "watchers"?
也许是这样的?
public class Client {
private Runnable runnable;
public void sendMessage(String message, Runnable runnable) {
// Method to send messages to server
this.runnable = runnable;
}
public void messageDelivered(String receivedMessage) {
// This is a method subscribed successfull message delivering
this.runnable.run();
}
}
然后在您的 ParentClass
中创建一个 Runnable
并将其传递给客户端。
public class ParentClass {
protected boolean checkConnection() {
Client client = new Client(); // Lets skip all configuration and connection details
String testMessage = "Test message";
// Check that messageDelivered() was called in client with testMessage parameter
MyRunnable runnable = new MyRunnable();
client.sendMessage(testMessage, runnable);
try {
runnable.wait( 10000 ); // Wait for 10 seconds
} catch( InterruptedException e ) {
e.printStackTrace();
}
return runnable.getResult();
}
}
可运行class:
public class MyRunnable implements Runnable {
private boolean result;
public MyRunnable( ) {
this.result = false;
}
@Override
public void run( ) {
this.result = true;
this.notifyAll();
}
public boolean getResult( ) {
return this.result;
}
}